From e2f1dfb0972296dab5170eed51a10bfa5e6e5ac0 Mon Sep 17 00:00:00 2001
From: cyh666666 <2398882793@qq.com>
Date: Fri, 6 Feb 2026 17:10:31 +0800
Subject: [PATCH] =?UTF-8?q?consumer=E6=A8=A1=E5=9D=97=E5=AE=8C=E6=88=9095%?=
=?UTF-8?q?=EF=BC=8C=E5=9C=A8=E5=92=8C=E5=95=86=E5=AE=B6=E7=AB=AF=E5=AF=B9?=
=?UTF-8?q?=E6=8E=A5=E8=81=8A=E5=A4=A9=E8=B4=AD=E7=89=A9=E9=97=AD=E7=8E=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../COMMIT_EDITMSG | 0
.../FETCH_HEAD | 0
{mall/.git_disabled => .git_disabled}/HEAD | 0
.../.git_disabled => .git_disabled}/ORIG_HEAD | 0
{mall/.git_disabled => .git_disabled}/config | 0
.../description | 0
.../hooks/applypatch-msg.sample | 0
.../hooks/commit-msg.sample | 0
.../hooks/fsmonitor-watchman.sample | 0
.../hooks/post-update.sample | 0
.../hooks/pre-applypatch.sample | 0
.../hooks/pre-commit.sample | 0
.../hooks/pre-merge-commit.sample | 0
.../hooks/pre-push.sample | 0
.../hooks/pre-rebase.sample | 0
.../hooks/pre-receive.sample | 0
.../hooks/prepare-commit-msg.sample | 0
.../hooks/push-to-checkout.sample | 0
.../hooks/sendemail-validate.sample | 0
.../hooks/update.sample | 0
{mall/.git_disabled => .git_disabled}/index | Bin
.../info/exclude | 0
.../.git_disabled => .git_disabled}/logs/HEAD | 0
.../logs/refs/heads/cyh666666/consumer | 0
.../logs/refs/heads/main | 0
.../logs/refs/remotes/origin/HEAD | 0
.../refs/remotes/origin/comclib-analytics | 0
.../refs/remotes/origin/cyh666666/consumer | 0
.../refs/remotes/origin/huangzhenbao-admin | 0
.../logs/refs/remotes/origin/main | 0
.../logs/refs/remotes/origin/ysj-delivery | 0
.../00/8b5c090b3c9236fa59321f68f2ffa2469a747e | Bin
.../01/694319e412029ecccf3ab86f71808167b49b70 | Bin
.../03/2b689e3077670c856cfdcc73fa698bfc7af990 | Bin
.../03/69a8c5c0d731a7a649e4d3a2bf9639a3a5b727 | Bin
.../03/6b8a113d4d3b907a1329dcd0db811235fef113 | Bin
.../04/ad80bc32d65dd9c0abb88c79ca268a8538a2a9 | Bin
.../04/fc7bc90aefa3c43c95e8ad9e38e2a354c5bc39 | Bin
.../05/da5deeacf59c3e86b862d6b5f4162654f31088 | Bin
.../06/764b6a617f56c94a8be328f3e4c1edf635cfb9 | Bin
.../06/e381d6f01912f7a34ca8ae6673db2b0f909fa6 | Bin
.../07/10effd5f2d8f8b8ce35e1a915ee3eb268a541f | Bin
.../07/f2452494909d431aa9bb5ef2a12dff9ea410f9 | Bin
.../09/c33be3944cd0928c4d4300b5091c480e1e6ce4 | Bin
.../0a/0686686da2d07a9193029565c212429bf4d4d9 | Bin
.../0a/71faa46489ab0b2cddb585ef9e2d98ed2e8f7a | Bin
.../0a/8ee8803328745670d6192f19f6e150f4df5686 | Bin
.../0a/b769f1d2f8bd8a6995c61e83311835940803ed | Bin
.../0b/f13ee5f510c7025881c9f211cfb70eaa45a84a | Bin
.../0c/687186d417a4e3631805004b5133cab99c8126 | Bin
.../0c/725c32404e9d25006c55809b6bcc0406e6485b | Bin
.../0c/956c6b50c1b8178b884bd9be07d423b813cc6a | Bin
.../0c/aafefe247b87090638a4ab1b4a3882a6bf24b6 | Bin
.../0c/b8ccf6ad4a4cfefc40afd2a268d978bd9002e4 | Bin
.../0d/1bf091bf60a9a62d444786fcce1e23fc854d25 | Bin
.../0d/5f1be5fdcd3673ee1a40c081403af1baf96f84 | Bin
.../0e/d62a82583382449a860a0d5bd7517a93c88dc9 | 0
.../0f/9cc197b0b07feb5908da3cee31b14636f51c9d | Bin
.../0f/d1cd5c57fa435a479620dd5131959324ef33a5 | Bin
.../10/49c5b251d938bfbb0e29b5346aa828ea492481 | Bin
.../12/1595995e61cea28e24041dc7c10679a3eaeb7f | Bin
.../12/172425d59adec075f823584af9c70b03dd8c70 | Bin
.../12/41580f5a05d6166995a04e78f13fd94feaf728 | Bin
.../13/4f83615db32b2f2faed54678e24a7ac4ed8733 | Bin
.../13/fe09a27e5ae9dfb3acba8c0b6c863ef1d1b27c | Bin
.../14/7f2b3ba0f037fc23ff7e554b9f2dc54d772ecc | Bin
.../14/7fbe1a877abf30870ef2f3697d2353bd3a960c | Bin
.../14/9e6520aa7c7148cf986ddd101f5834c628631e | Bin
.../15/67c72bebe9966a084da09bb8da3dcfa795faeb | Bin
.../15/92bcab98e8678ef9a52ecc284be9ddaa957077 | Bin
.../16/103cffeb25b133671b55931ee327c1a6065443 | Bin
.../16/c2fafc914ccdd36c9d0f1ccfe861f7e3a49bd7 | Bin
.../17/df18fed1f5bb4c133c825f81588fef96dd1245 | Bin
.../17/e2fe7b101b8f0fdb4bfe1f07d927b6696859c6 | Bin
.../18/0ef42521d7bf5cdadf85393eca662932691c07 | Bin
.../18/4941cd3a4e9acba709d46b9aa9bd7960848536 | Bin
.../18/83070ece89251104029e8126204c3dc18fd472 | Bin
.../18/dab945708274aabc176efcbd01991ca8f21abd | Bin
.../18/ee45d070678e985d9da10180e8876627b5e51d | Bin
.../19/ae75f354c800ec08415224e8e139c373d5f2c3 | Bin
.../19/bf509dd78f165673c49c5d3ddda5561550a56e | Bin
.../19/de501a908a11519ec148e74ef268811c717040 | Bin
.../1b/3aa3821b0fc5aa94f104ebadea06664be7d73a | Bin
.../1b/6aeefab0c91d2d40f8302ae4b4bdf6415d6d7c | Bin
.../1b/787617684d74767d6260da32d9567815999202 | Bin
.../1b/7b95f34f597de771ca1ee1a9d66ddfd4389dc3 | Bin
.../1b/83b5e0b358b18c0d830d2b597aaab40d040297 | 0
.../1b/dcf0c258e3b224e6d505aac4c3eb426d06bbbf | Bin
.../1b/eb9a3fa2ed892e2b558611e02e57296c7d87a6 | Bin
.../1b/ff67d42ff6c38a2800aa87bfc503cd7134a470 | Bin
.../1c/8b5a11f024d5b079241c2689c4bf1c8c9aa407 | Bin
.../1c/b6e8881f98fe015c076f5469247fb4482738df | Bin
.../1e/163a2ce00a24d44df5a10d30d596309f97b2ef | Bin
.../1e/48bf62554917c4b4a449e6b9892f0a8e516121 | Bin
.../1e/56968b9e9f2101628e6e5553974a412adde23b | Bin
.../1e/8000a5fdc86e82f5dcd3a07e8d167adb5b88be | Bin
.../1f/39c33a9265c390acceba97e36b561406e40474 | Bin
.../1f/78e4d427eec7184f10ab308161d210155786db | Bin
.../1f/dcb2c0e56e9d2c5d04860dcf524024a5a5f71c | 0
.../20/22a587f691d68b43ee561754068e7a22b1eb65 | Bin
.../20/8cface25b7b54ba263b613ef98a30e18aeb7f5 | Bin
.../20/d50671e0efd5f6b30c167573daaa490cb2d9df | Bin
.../21/33fc673b45dab46bfe6b6efc5a699ebabe2035 | Bin
.../21/580e5014c27303a68e020f7f01f2affe9e33a9 | Bin
.../22/6d8b92c711ab33f201340b8631c0712d52711e | Bin
.../22/e586d1e7f20be7f5f9d594d9bce37f1985c839 | Bin
.../23/300e7c1f188b220316718291216d44c6a227e0 | Bin
.../23/4c8c9b7c53316498712767ec4f8a6e09d5edae | Bin
.../23/8d5a9ebe4035a679b0980182c9620be18002ac | Bin
.../24/52ff13e613ae15f1139988ff429504631c7094 | Bin
.../24/e78cbf7072bd8878711834ec2e737279c5be56 | Bin
.../24/fe0f9c7cfe870424807220dd13713431873c84 | Bin
.../25/736772286ae52ecdedc84fdad7696a312e9cf8 | Bin
.../25/7f52f5454af5123fedc7fae385cb5b4a82f89b | Bin
.../25/ba378f6366b29d2d906dad0ad254464e0ddfd6 | Bin
.../25/d48391084c4a847f05d5892a413cea1f5c3948 | Bin
.../26/29410e6b05ff7f61c2b3274a1e4bc2d70c14c1 | Bin
.../26/8e76c79f234b923a1830f675ec9328cad00422 | Bin
.../26/9cbc4b1f06a0580c6b0c32d46f27fc51ac3d32 | Bin
.../27/d5f5841728f9e41147e796c578128749e56ed1 | Bin
.../27/e3757e0da5ca90b005f469a9a8645555bd880f | Bin
.../28/299d2730a56d7cb240f4ad3c4309daf6fc5902 | Bin
.../28/5660df34948c0f841852b752ee4cd08d5d93d9 | Bin
.../28/b252f1254464cc50677485fef5a8b2c5f94b3a | Bin
.../29/0e5606885e2f06de05d769f4b8c098d7b4148b | Bin
.../29/8bc55229c06bd010c6c16921c272fc9e1c68f9 | Bin
.../2a/92a152b849cf9d885504c74dc3d76c2d2685eb | 0
.../2b/0ee0c8b6a507fefa5b29f5c4e06c033f34ab2a | Bin
.../2c/1c72e65fb19248f19b996259be52f3b2fefd56 | Bin
.../2c/1e55edc460bdf35a9a143ac13c9497c7c889c1 | 0
.../2c/4a4a97e7c3a8b6dd62e1d2dda669242dd3d5db | Bin
.../2c/be8d1a3684315092236e303bb42faed05592c5 | Bin
.../2c/c8b4fc926115a271ee3474554793f1403150cf | Bin
.../2d/3a88b2053d98e981ac813c002d01e063cd94d8 | Bin
.../2d/8ea88b0a4c8ba1c52207099e056a8cffdd48c1 | Bin
.../2e/81146c1b592a07c9bc4d13a58d315276270ec3 | Bin
.../2e/decb814e2097a27a7f8b496a045ecdd415f12c | Bin
.../2f/0ce74e8ba0b322284b6e3687795cbdf0b888ca | Bin
.../2f/144d96a7c5181be502c8da25816ee6b5fbdc53 | Bin
.../2f/a4541115539240980a1a9021d1fc2bd09f8b0b | Bin
.../30/ac59404abb6fc80352762c4b16bb502b0f7455 | Bin
.../30/c70f874b629eaeabb195cf41c483500c0cdf24 | Bin
.../31/b975111e856d266275ce3fade69d4c2d8f5033 | Bin
.../31/cca3dfb52946d939e15ad38d1a89fa31c3e4ab | Bin
.../32/4ce61b8010d6b52aa895a06ad9642314247aa0 | Bin
.../32/69c13ebc8ce97a97e352a359a9d8c999dc3e6f | Bin
.../33/081996e13f876d85089c19be852732faa01115 | Bin
.../33/4f8ae3e0d4b2016c1789cbe42a8edc8bc05f85 | Bin
.../33/79830ad2165b9342fbdaeb87e625a4418355ab | Bin
.../34/13f86c0eb29e52d7190df4bf06ef4cce9356cd | Bin
.../35/ce4cff6e2ba290a45d8ba776ecf484f01b46f4 | Bin
.../35/f5ddc2e91df10b961dd836d0827fe9cc942fef | Bin
.../36/435e031d05ec3f07c895338e54b55b81a85673 | Bin
.../36/c899117a6cd78ea00c9231e860e4a8eb63e2cc | Bin
.../37/432fa9442f666b4c992fdb2857987e62e31360 | Bin
.../38/b0e73b9c5fe57eb1257900c06db180342af2e9 | Bin
.../38/cee1f63fe30088d4d98d569e01bbc6d30c7d19 | 0
.../39/1ca1aed712bf7de739f5618e0aa9311d8cb8a7 | Bin
.../39/4b450dd1b426150d4008b519aa7647a3db5c7e | Bin
.../39/bfc14d807d39e6943ebb56fcff552f0f076291 | Bin
.../39/c6929b4ce524f268bdf6c9a35ed1142e15876a | Bin
.../3a/275cbecdd4ecc3b6c8a6c224e75a506854385f | Bin
.../3a/4cd241b1bb00943722a8ed2cb1995ea95235e6 | Bin
.../3b/7e062a4fb4224e3e94fe3b6c158b103519b6f6 | Bin
.../3b/8584d35625d986cd1eec83db87cdf09438ef74 | Bin
.../3c/7445168e74e221e30b4ec58e71d3490fa45809 | Bin
.../3d/6563399ccbd637d6b73d8f92c358506d457c0e | Bin
.../3d/9f7f895677fb97d40b26a2501efaa73b33ae30 | Bin
.../3d/fb25d88e89853ddd6fb6f0e1658d4aa65c5b9e | Bin
.../3e/32cec58337663bd5dc3c59fb47c51bf4e31726 | 0
.../3e/57100d337529ec2d772d1af3e0f2e9def0262f | Bin
.../3e/c108f198b75401890046dc3412dc9ba5b0d887 | Bin
.../3e/e235277f1576100bc9d580b1632a204e9aa4fe | Bin
.../3f/107b78add37b54a0d4f31ead7a30f8439476ce | Bin
.../3f/a08c8af9d22a7ae485af7f5c68a42ecc834272 | Bin
.../3f/dd3ad545857ce2724d53a82b67a5e54d003661 | Bin
.../40/4eb7e1fa07d4c75262899a9f94ff5bf6713ff5 | Bin
.../40/938b6b337f4d391cf1c44a3f6509c2d7d6f082 | Bin
.../41/dc0f0d913fbb241ad355a67de7f714ac26c1ca | Bin
.../42/35f6eadd3a25378daf102630552013d046f071 | Bin
.../44/07421db98a92de0a0dba3480688fa052c5f813 | Bin
.../46/2242984cfbf9b875766147984ceb484e483b10 | Bin
.../46/33b4b6ca3fadb3d57d532851a23a15470f1873 | Bin
.../46/3ab6be92339b7835879f6ea54ac16e47bdce82 | Bin
.../46/5042e1c9c6003972c9e5d5fb772859c2d650c6 | Bin
.../47/f8a0ca976845eafa82680adca9364c66a3a124 | Bin
.../48/2d68a5484b39bc59dbc2915b8648aacae04b90 | Bin
.../48/a43200440fe5676c07838796c6c62a757b8cd2 | Bin
.../49/ccff181679e3f14c904911b4d182bc0bbdff87 | Bin
.../4a/b722a118d41f1999c2203d12742ace922b176d | 0
.../4b/4eb4ca04c5bdfebfc6aa8c13754b2f0f640481 | Bin
.../4b/9a6bfcd9a5ee5406bf85bf5afdd177821a1de9 | Bin
.../4b/d0b1185c911d55a39523cc45e601f223f42e94 | Bin
.../4b/d7f122ed6729e5de708c17d963f7e22c5fe4ab | Bin
.../4b/db1c22f4589277d27b97b3abb53c1c3e25f256 | Bin
.../4c/81081239bfcc99b7d36362101d19c4d8de855a | Bin
.../4d/91437418f11cfc516a76aa7a34c402a465b4f8 | Bin
.../4d/a64a2aabaf5a4eaa27f013e1771f241998241c | Bin
.../4d/ec90cbc07b379c02be611a55844d7cb6e74204 | Bin
.../4e/072b393202fd716303d9741d437fefda357032 | Bin
.../4e/099668d344161856d5536fe4a8c9b1ce960df0 | Bin
.../4e/4efb66049ffdd484da1e15b402bbcf53d3de15 | Bin
.../4e/d719cd38786fb5f9ab3b4c54bef2b9b16323b9 | Bin
.../4f/17fe44fcacb6f8f6d8d40dd8e7fc26476d6f70 | Bin
.../4f/bef3c18c64cfe91190ff31ccd6a8deffb957c3 | Bin
.../50/0dd3ed5e0fb22ac2a62d486989d0c1cbb79e7c | Bin
.../50/467c2ae235740ae5b835cf7885d01bf70d21b6 | Bin
.../51/0f802d4bf2ace4517b350b8f03381ea944bf5e | Bin
.../51/12d4498367130ecc5688b454aaa09ca75f9482 | Bin
.../51/175aa0e1d7abc8931a4d59903c00c563dcf3f5 | Bin
.../51/ab6f34a2af36b5cde2ee0a684d6aea52a71ff9 | Bin
.../52/1c452895cc2c5c0c9f1c12e8b2cdd9314bc1e0 | Bin
.../52/4d76265f6b817647d395d85d509084dd5aa5d8 | Bin
.../53/6a90a24880298c0e4ed5e5ea8e1b5d2e60dd73 | Bin
.../53/c906358a9af7f098f9459886d3a991e2fd070d | Bin
.../54/8f595bbca62114fc5bb85d7d14d3c6f080d83e | Bin
.../54/d86347606a3013d9a188bd77d0cce886ea4b6f | Bin
.../54/fe54bd39bc0a2acd700691ed516cc9e6e53e71 | Bin
.../55/9492ddcec85fe69bd3cb670a0d999c5d0bad27 | Bin
.../56/a3ff4959c5003632300a77b8dc7348ddd9fe3c | 0
.../57/0c63d9ac278f962437674d0fd909aef933cbac | Bin
.../57/55d728fa672faa36c79f1fad96b6547d279747 | Bin
.../57/f3d413fcfadced5f3acdb8db7be2308d75108b | Bin
.../58/09cc954a63e3a0f5812df5282b5441e0f9249f | Bin
.../59/6795929f5f939a614f38b1baf9ce4b5bf60e59 | Bin
.../59/b14f97b328cc856d5c0db98a9eab670e7f478a | Bin
.../5a/3b1e4d220d219e2de574c2ee5f29e7bf3f4ebf | Bin
.../5a/b7342988f40bac2093deee41cf6b385741b665 | Bin
.../5a/cab0ebe17749b444faf345ff71f12ae175b59b | Bin
.../5b/53a47aa875985e75f384064958733ee2bb197a | Bin
.../5b/6245f64ee548982568a0f292c0c7bc38f46037 | Bin
.../5b/7b1eb6083ae15d9445d9ea5e2caaaf8b09ac92 | Bin
.../5c/02cd563f92a1ffdca9b71566e2bd43e85a5b13 | Bin
.../5c/113dc318007c89596dcdf652a15bd07f54bdcb | Bin
.../5c/72f5223da44bd5c47cb7828fb211f294f2120b | Bin
.../5c/f252a2d31075feb36484d24e58fd4269d712f8 | Bin
.../5e/053b497c1a56047817dcff8ad6a35ca071e3b0 | Bin
.../5e/5c7d69ff81ce6d8558f3633e8b072dc8d04083 | Bin
.../5e/7fae15d66f486f1aa2a9528dad44152d64f59f | Bin
.../5f/221961b2557b4779f0fab49ba90a03745f5ebc | Bin
.../5f/4b31160507f8be954fe55e596f9ea8959a849f | Bin
.../5f/7dd2387281a8c1203d0741805d7f78d13899ad | Bin
.../5f/d896a2e8e1a97a9f9a3887f10abda025ca72c0 | Bin
.../5f/f409d6a268c58de83dfacf23838346fa007e40 | Bin
.../60/054c43c026a9344fa1ee448cd24063356de41b | Bin
.../60/3f4f1fff51879ce2cb906a71280df92e5754da | Bin
.../60/5e19453853ef8243b54bbef0b19c6b87d790d4 | Bin
.../62/61795fcaf6b35cbb4e92b8969f35ae60b508c9 | Bin
.../63/19b78bbb0266d9a50198ff043e82703c79a52a | Bin
.../63/b4a9ad4c99374b9942c45a0d61bd8cd9b98c51 | Bin
.../64/8e7cc00b47deccbd2bde65c56a521dc3660377 | Bin
.../64/918dcb2c9ae7032a0739891e2c02e49346cf8a | Bin
.../64/f49a36e2a401b586d5888f03dbb6ef4e5e58df | Bin
.../65/6210209436fe01585be84e9b05f984ee1958a9 | Bin
.../65/6d76dd651392991879212acbc8fd1885d143be | Bin
.../65/c5b089e2075ce80490dfe6b95681c5ee2fa916 | Bin
.../66/aa909193b008842948589adf6f302840aa6efc | 0
.../67/c6133de7898674c9531ba23c820122f2aaa0ca | Bin
.../67/ef2d6d6da3c4070d286059b9add37be5aaac97 | 0
.../69/34603289b5a2c3369b03d428b6bc28e348c61e | Bin
.../69/3a201a058a51b23180e19de68cbd5a3dd54c58 | Bin
.../69/b5015c815bebd7813a4856b7246569458a2416 | Bin
.../6a/4104b80b2cf0c91383c9702fb381e29bfc1042 | Bin
.../6a/54f7eef61252a21108c1d2e3e8128ccb949278 | Bin
.../6a/96b7f56b19f9e88b866372f1142087d9b8a4db | Bin
.../6a/c2a9c762cc4781e3f20e3e4b1a12e220d743d0 | Bin
.../6b/5318e6a449374c05e9fdbf297d036fcdcdcc86 | Bin
.../6b/683279322bfa8f3fb914ba3991d06e0d81be45 | Bin
.../6b/c9be2a31f3a24e1f864c868780bb409c64e8d4 | Bin
.../6c/95008ccd1dd7bb737578b08aab3b6e2aa52172 | Bin
.../6c/ac3ba57621be2232b40b800de5bcbb37c80f01 | Bin
.../6c/bb55c7bafff1accf0273f903d87ea28cb1c5df | Bin
.../6d/1e1a82518f16b49369a492ac964712a7dc3769 | Bin
.../6d/9d4ec341bc4609940eb251a7b5010c5ec4b34e | Bin
.../6d/cb725787d340db48780cc4f0659f09aeec17e7 | Bin
.../6e/9f5b11699788559819d1c1682c46560cf6aa4e | Bin
.../6e/a10712ca96453ab337e1e8e0ea417d3d38a74a | Bin
.../6f/1065ce9604fd91accc0dc29c2e1daa007e0d3c | Bin
.../6f/62924f1e1d130c2c8da85be00931f173817b93 | Bin
.../6f/638a238362b20064bda9d86d8876d1a7c3d76b | Bin
.../6f/f5625b558461a2789cb48e081cb43467bba145 | Bin
.../70/746bcefc6597cb15458c3737012b90eaf931b4 | Bin
.../70/9e4fd028183514fe16622b0195c5c966548b67 | Bin
.../71/4bb98d46ceb983f78c238e56bf39f179ffcd4b | Bin
.../71/5e894fe682243e752ed67ddcd3608c2a2bc058 | Bin
.../72/0ba6818b97e60a491ea02fe71a71e79ee6c697 | Bin
.../72/c1505dd7fec1e1e5ae6f220209499b0c5df30e | Bin
.../73/18fbf1f605ca6b67232d3346b81a95d67dc008 | Bin
.../73/471b7810b08345cc8d1a7525be6c9467bc8f3e | Bin
.../73/498128dde533e8984c8bc2ebcca43253e46fb6 | 0
.../73/feed5a38516b3f0361437821d3ce0ad9748e1e | Bin
.../75/3ffcb9c3fbeed20cdef4117ed80d32ed37b6fc | Bin
.../75/fad97d5dbee5a32ac586cbfee2d8e1d73dd1f2 | Bin
.../76/5ececbfc6feced66bbd9cf25ee079dee6be576 | Bin
.../76/eb96ec0c1c7fb3618e30068060463074f087fb | Bin
.../77/2bc57e30e479d2b08ed51bc99a28fc361896ad | Bin
.../77/bb4026e862ff0f7cf8d0992a6dee538c948d0a | Bin
.../77/c4757ac3ffde50f67703a7e6ecfc555372b2a6 | Bin
.../78/a44cc8caf24ff9c8ac488781edd6132561e1f8 | Bin
.../78/b849e30d43974d8ccf126680001bc7f0551fd1 | Bin
.../79/95f6f9c21a49bc45fa9f0621fb446e425ef17d | Bin
.../7b/2c4d5633b321df02c1d0f57da7e0f5348b5f78 | Bin
.../7b/5377944d3ac36cffbef1d045c6c8ab7775cfdd | Bin
.../7b/7b63c22f42c0669dde59b15f298bf7ff09e6f6 | Bin
.../7b/847032f10b09117ce92ccdec99ce36cb7f470d | Bin
.../7b/9094c5bc90e051aab7e764b199279aa3902da6 | Bin
.../7b/dd7157abc9507ed8222d7a35c10c3b76dc8556 | Bin
.../7c/11504fac038b2b77cf91e17d7d5bdf62804f91 | Bin
.../7d/275fa1bba484dbf2d53cae5df74b38dd8c4652 | Bin
.../7d/4d09094bc4c86a66ee02dba2acd91f49f9336c | Bin
.../7d/4f8c11ddd4e5120d8f1e745601462c097a6bee | Bin
.../7d/6e20f8c4946bafc9227cdb37202c03414a3270 | Bin
.../7d/8dbe2197609d211bb6b8abedb1fb56d0eb1a41 | Bin
.../7d/ae38f8bdb94085dfa8bf29620a28445f3233f1 | Bin
.../7d/dce6fa57afa4b7748224367b142e08d255f5b1 | Bin
.../7e/c5599574ebede5071d844e3a5b9d0ed87bea93 | Bin
.../7f/4e8d976a907ca99dbe726121d6c8198ff6a522 | Bin
.../80/64b2bc935e020bdcf83763977937bbb1ce6eb0 | Bin
.../80/fa6aa344d13a67bbb82715bf6ca5f861862318 | Bin
.../81/3e91fe96e20f837dc93a05b72ef831d0d62893 | Bin
.../81/6d6901a8d814d1437112a0063792b350b4f1e4 | Bin
.../81/9cf5486f5dfd9ebfe852accdf6e53493b209f5 | Bin
.../82/00c3a94049d5c4c6b005c133af9e43ff3e8442 | Bin
.../82/a6e32242823de823426642cfc525308c0e4872 | Bin
.../82/d46a6bc8796fc88122351de921293b6cf86b90 | Bin
.../83/10e3df76db1eb1b240255d9b5043138fbbf844 | Bin
.../83/113b958b5748559e401af5eb07df301b51cb4d | Bin
.../83/dcc87376c48bec61c8fbe330abd64fffec0c02 | Bin
.../84/0e6fcc853120745657e8f3823196136ea58a77 | Bin
.../84/18059a1748fd51b8764119bffd0bd22b437b86 | Bin
.../84/4563ad0bfecae89ee1857a77c28b2f31cb2466 | Bin
.../85/45a3148bac1e161d5fa5825a012effe6924619 | Bin
.../85/4af7d045127c7dd3669b78a38d6bab18a284e8 | Bin
.../87/9ad4d767356dd6fa26d3e0bd0c1032f4473d73 | Bin
.../88/e1e655d3e88558e24e96647a4ea96fb2b307af | Bin
.../89/6f669a2d75c55697c17927495d370b15253727 | Bin
.../89/7375f218341523c676e20119170c70449efe1b | Bin
.../89/80aaba9e038dbfc4d94e26dcda0b926774a0c1 | Bin
.../89/bea656620e9505b520142312cb7faf366feaff | Bin
.../89/e45115cec0917297a59f1f3543a075272b51fd | Bin
.../8a/535e3f387f58d736ca44a544e45ac1fe784cc8 | 0
.../8a/cf24d88d47214bada9f81bb80e26f203e95f55 | Bin
.../8a/e452a8a8350fcbfc5a09d44b392b1054338d41 | 0
.../8b/62d14585e7fc204db28ed36b5c1ae9570672cd | Bin
.../8b/638472b45dac3a965ed44f4160a4710e3d7624 | Bin
.../8b/b3efd50c4554b9aedb990f0cc2f58904ce25f9 | Bin
.../8c/5024a943b9999336ac3b491b5384c43bb54d30 | Bin
.../8c/6c10a63e8d3b48f86288f982ab9d72c237e7f9 | Bin
.../8c/e98ec397fe0946a262e7003a5a9535b281ffbe | Bin
.../8c/f90f4c7db8042f785d751a787de126cae30c2e | Bin
.../8d/9528886773548cfd4b3562da3e7ee7f85aaca2 | Bin
.../8d/970c70a191cfa8ef6ac8051d238b2142c47286 | Bin
.../8e/8d13b40dcdd5a3c430dd44ea524d7881e35eae | Bin
.../8e/9f3e3388fc1188f4478c64da2383c7d4c1b570 | Bin
.../8e/da932bc1c86026a3f7957103a4e1b337e83a48 | Bin
.../90/1570cf62268d5c3b327380dc171482a76b72de | Bin
.../90/95fd79417185ba3d532c3f11c40b58bc068f39 | Bin
.../91/80a3f5c1dcaf2c9f07b6feb729ceb33e84864f | Bin
.../91/9295f3c54c97388f86a3308ccf49b33e1664d4 | Bin
.../92/8fe8293b72186b7e316ffbcc770464dc9d96cb | Bin
.../93/18327cc988ebe1c8c229f02675c8ef39305c74 | Bin
.../93/d69e90ad02df30eaaca6f05777a021ebb74a18 | Bin
.../93/ff692b9c7663db897c36e3a70265e299f46b65 | Bin
.../94/1b343274f69f9328b2f781554fe560fdaab343 | Bin
.../94/5c717a8610d2c55eb8bca924292964faa400a9 | Bin
.../95/8e7acc6373106b175dba4df7a51bcff3654489 | Bin
.../95/b35338e0993e26c30dc2c9d25c74e93f6b3bb7 | Bin
.../97/63fe0021dbf4921c086ad9b3e4e8947e60d372 | Bin
.../98/b477474df113ab2d7cabc09f07767dc0252939 | Bin
.../99/38dd2ac6e871cbc4fdc629b20acf1c940fc8cc | Bin
.../99/9dcb1d569c071fe6c14c2eaa13cd4da155d285 | Bin
.../99/cf725fca7900c87ded6d8bb0e9056efa4d217d | Bin
.../9a/7a140d49ad83d9a42f4d1522efea893fcce83a | Bin
.../9a/cd5a6b2be3b43cf61b8d7fdfe012c1bb603bd7 | Bin
.../9b/6b4af19bacc8557da22fdd44bcee809c055353 | Bin
.../9b/83bec86f41e9ecf811c17915f2ab69172cd716 | Bin
.../9b/f2a0ee0a8cc06f8eb81e6905482da1feea58b8 | Bin
.../9b/fe13984245bb959c91a49088fe0cacabda88ef | Bin
.../9c/c7db878956479fc36be8ea8066f8bffff1ff1e | Bin
.../9d/44c43e4bf22c551b5f7f7560a96a48233b8449 | Bin
.../9d/d7d4b7eeeec554dce372f34574269d0d696e13 | Bin
.../9e/240061834277dddc0e83095c55d7ff40a4297b | Bin
.../9e/b05253d331a2ee3b24982553c5264cc7f35f41 | Bin
.../9f/3c2803e3ae211b0917f347d6f316ea08f3eea8 | Bin
.../a0/2fabc6e9caec1d9377fe770b8dfddd64548dad | Bin
.../a1/3a15bef1f0681a37746c13811fe2e858c0e4c7 | Bin
.../a1/4235e2c2b220bf056dd52ca9cba123c85105ee | Bin
.../a1/da08fa22649d9d2a2887200b7765060b74c41d | Bin
.../a2/4c488a88bc281c74a5b1b646050ad94f7a2839 | Bin
.../a2/6780fb0f603d233f172e4788271ca7b7849e04 | Bin
.../a2/f3c8a5168b0b5e7fd683a55552283adeb47075 | Bin
.../a2/fce1be5a963364ad9059cc08e6558253065eee | Bin
.../a3/3c28cb7c9ab96b513a0bafd3aa79cb0063289d | Bin
.../a3/56592b8dc6c0f09705d8ca4c734ec42869a4e0 | Bin
.../a3/f194011eedefee35d0305349c20bd856ea3a96 | Bin
.../a4/4bc0a5160b82e4a9fd18950a83d63d862c9767 | 0
.../a4/7b3f3e45d4d5f9110389a6622bc5c52509baa7 | 0
.../a4/dd6da00e3277b6055aaae86dfe5764112f6fee | Bin
.../a4/fa00c93501c27c16b745b7d262d0bd5a838dcd | Bin
.../a5/137cbd6ca212614699c424aabe157c727956ce | Bin
.../a5/e69b8b10c987f75c8fe2d1e1d4e4dce13288ac | Bin
.../a6/781c370dde55c913852659f483086520082310 | Bin
.../a6/b8041f751d564fba29e16794931b6a993fdf4a | Bin
.../a6/d2b56b759d589efcbeb81dc6593a7bc64cdab9 | Bin
.../a6/f3b3e43506926b3cd24f4ae40654fe407b16b4 | Bin
.../a9/2848ae01f5bc2932f3bbc07978b05708c60e45 | Bin
.../aa/48a3be2d0b4d6d81c3d39409b3f547a77b1c17 | Bin
.../aa/bad9385dbdd5aaae23fc0d6bbc3277e14c903a | Bin
.../aa/f959c27e8dddb5ab1ced2e613cdfa7357da536 | Bin
.../ab/038ec029662aaa9dcd7c624be85d5e35dc6e96 | Bin
.../ab/06fab63ebd863dcc6d8cd4c56756ca45c10be1 | Bin
.../ab/0d75debc10f7380d048653e0c679890fb1613b | Bin
.../ab/33eb5ba264ab9d3ec9ef01476a919d3d2e69f0 | Bin
.../ab/de6ca42f4c753feebc842e39ea2da263b180ce | Bin
.../ac/527d5198323ad1185f9c9a4868f4a80a2ee328 | Bin
.../ac/9090a3544275881eed66d7f104073b21048687 | Bin
.../ad/0b567ee3ec142af8fbfab01197f3aa858f1e78 | Bin
.../ad/1c8d8a5b69624952a8f65676b51ff1fae89022 | Bin
.../ad/787f6642b6e1c3b18a911a31f53c3a852d5f35 | Bin
.../ad/a359c9b1bf3e213cfee20a3f20d7a3576ceaa0 | Bin
.../ae/69db8c27c1e1bf488e8af3be0a6f3cccc2e89a | Bin
.../af/13a2372f43dcd4439d86642e38e97aa10937b6 | Bin
.../af/316e6d94c477505554b040f022f3e40457146c | 0
.../af/3c23069da84a0f938cacd83e8ad088f915c255 | Bin
.../af/40ac727223a4b0cf244d2b0f4c56e4604d499e | Bin
.../af/5e8d686e666cdec25b853d039a7c040f093d95 | Bin
.../b0/fa749e58910255a9551f524e7503d3b68917c9 | Bin
.../b1/8482381fcb794d57ad3416ca690da405a0916d | Bin
.../b1/99e3abb69766a966223660960f74c7dd8263a1 | Bin
.../b1/b5c166730f47b07e5b49bbad32d6efab82a1e2 | Bin
.../b1/ee362739ffa1548f13d8c2f504b232c913161a | Bin
.../b2/f9f6d7d97df4563a3bc2a50476968ad0c6db60 | Bin
.../b3/45947d6326e8214ac27f987bbc5e7c98ad5cfa | Bin
.../b3/ef5702b5b5e0faa5a1b5a7374356b4b5aeae2f | Bin
.../b4/6448fc700a405206df90f42fb0db1deb64df9b | Bin
.../b4/9d17901ea775085d768aaf97e236004354d093 | Bin
.../b5/5f2bcaff7b4711a4f44f9942f9df869538505d | Bin
.../b5/9d1ba1f7c34f80721ef74659796d3f2559fcb9 | Bin
.../b5/d595a0bd414c1a33a4884ed891f593fab323e1 | Bin
.../b6/05c2aa7cec0a7b660e4e37d6dff14f28b5f865 | Bin
.../b6/200cda285b50c855c9b7b5c9ddf5e1aec8f74e | Bin
.../b6/34c762b30e72de14209ca03c40039c9b0e0ae4 | Bin
.../b6/44120ca6e565ed49b04b6741c1932f0a32a128 | Bin
.../b7/740adb528068e45757fbe3172b56dbe0f8b2c0 | Bin
.../b7/cd10d93f8256a17b92764d4250fccb19253723 | Bin
.../b8/a1d782699a691668ea82b718ff78efbe60e31c | Bin
.../b9/887de60894ab6aa5bea2a1c4c1811961d71ce9 | Bin
.../b9/c605fdca0a60d7ccab0d2c6c5105575a84df3e | Bin
.../b9/df9aeb02ca41b48966f098ff489ff7c0ed9f85 | Bin
.../ba/2aa9ff7c5e126b80a3c65e6f2212b87b65a55e | Bin
.../ba/62dcbe0ca8ad654833741cd195254a47bb8510 | Bin
.../ba/c5393914ad73706c63ea0f622b2d2bc997ee1a | Bin
.../ba/e5a1276f4de06eba8e26a0639641bda4a7e9ba | Bin
.../bb/8abb48fd457cb3cb0b8be244fd466b3af7740e | Bin
.../bb/db9b58fe632b75c886ea52951ba855b3dfdfe0 | Bin
.../bb/e687e533b14cce1eaca24cfc7ebcccc0f022a6 | Bin
.../bd/066495c9cce3917a5971fa7c7ba69d836cc86a | Bin
.../be/68b9be75bbf434039a481b2392b2791375e910 | Bin
.../be/71360a2d8c4c16331ef285f2c95985e6b4f7a9 | Bin
.../be/78f7213596253a4ba6dcd31385910bced87b89 | Bin
.../be/8f83586cc1d00f621acbc721a83c15f6ffbca4 | Bin
.../be/90f1213bf8ef5948faf6a77e18f4eb533a556a | 0
.../be/ecb3bb03da266c02ffadae52e694bd710fa04e | Bin
.../bf/17addbcdc94359cc58eebeb0dfaf969ecf11f1 | Bin
.../bf/9255c99be9a957e9401419a59b7296963ca8c5 | Bin
.../bf/a4aa8254cb94219abf03bafb1fda1e0e1397b2 | Bin
.../c0/7e0e02d0261d06f1abfc680fc0710798df9cdf | Bin
.../c0/a444436318d393b0961f3bd309abcf098086c9 | Bin
.../c0/a82f29dee0fefca9f57f0b34e7804af0b38692 | Bin
.../c2/bf505ea7673e41a3256c9413c30b4b57636fd3 | Bin
.../c4/96dbc9f752249ada7492dbf8be9c9d2c8354e8 | Bin
.../c5/255450c9c25046ab37927ebb3e36a0caf3060a | Bin
.../c5/55321e256b3ab936aa6975ab489e04cd4ff616 | Bin
.../c5/57a93dbaf06781e7a0654655784979671e6fad | Bin
.../c5/862c5fedc5e084177e9e76ff8d3b4b9d186512 | Bin
.../c6/8c0e751bb47ed020d24a154c3ebf7872af903b | Bin
.../c6/b5d35b39ce47f9284694c38ae74310e21b81b2 | Bin
.../c6/fd344a5d41140b114b26a8a338c7a4c14bd14f | Bin
.../c7/47221ab2ee46d32eb5507b3a47331505da9553 | Bin
.../c7/d188b7021bbf38a0bcbcd6a0d57dd3c59621ee | Bin
.../c8/03a77c8fc16e7b18100a46a24bc4947c86843d | Bin
.../c8/506011bfdb818cb321d0fc48acacecf0e3d872 | Bin
.../c8/677694ddc2a1d5296299f350c9d1bbb2f35d8f | Bin
.../c9/8e640608a6881a2c007c5f7e55909b44a5310e | Bin
.../cb/4d5aa2c84df053512615a1e5fa913912420cc6 | Bin
.../cc/428e74dcf7ed21d0f19bda36be359f77cad148 | Bin
.../cc/f25259547a8f3b6026a988b70a4d06b5c84c36 | Bin
.../cd/35b39fae023e0134f38ebd482366a2bb346556 | Bin
.../cd/a2729cb49f56dd5afde5fb34bdbfccb4ccea25 | Bin
.../ce/29a322629863516a22ce51658cd0fbfcadf5a7 | Bin
.../ce/30fb618f719703864ec1d5ebd3d834580fc563 | Bin
.../ce/7e9fedfdf6542125f3176572bcf08c42f9f850 | Bin
.../ce/dc574102b9c0e727db05477123e31050d7d5b5 | Bin
.../cf/f54d39455c1c52b2f8f57105f4cd44e6b25c1e | Bin
.../d0/083f0ea936b54764267b5514ad871ba22a9056 | Bin
.../d0/1e3bfaee310616a8881c7903d83bff5792b8a5 | Bin
.../d0/53ad24d24a1ae4b38b04ec9ed98a092ed2f7b2 | Bin
.../d0/74d86dadf34f92a3479d11071c37be9e6982dd | Bin
.../d0/94e1a994cfe4680121a1aece838ffe8a9d3f62 | Bin
.../d0/fcd3dce392e103f2056197e689cf35d002761d | Bin
.../d1/66519b19317188b50596fd07e6d1d3f30300f9 | Bin
.../d2/17ab279178d653b36916619db16d283e96d739 | Bin
.../d2/29ca3d9d7824f9f7dd387525f5c6bc879232f8 | Bin
.../d2/6ae394d9750f38b975b00c9f9aae2d2511b0d3 | Bin
.../d2/9a1fa6fa82a1627bc8f3581d25be1157261268 | Bin
.../d3/7688eeb7d942ed81a6a575a58545d754f39820 | Bin
.../d3/a5b3e29a55feaaaa3628d7ae2b3d4c2552b38d | Bin
.../d3/c7847f794643256c56e51b527c537aa2c81c90 | Bin
.../d4/42cb3b681694a14efa08f61722d53c3cd03323 | Bin
.../d4/5d8d18e90407e3bae17dae36c6b928719e7be3 | Bin
.../d5/16ccd139d0a84699e158c83af106efc1b9f4dd | Bin
.../d5/7592ca7d17ce3d209458375b3de10683099cca | Bin
.../d5/a3a4e8f06dbeac70a06b73f58743d481d48742 | Bin
.../d6/2bb723d93c8fd83776a74941258e1a72a8b66f | Bin
.../d6/65c7eda68685c134fc9c4f1338fcd8bac7285c | Bin
.../d7/29d857cf6cf273ae9828cfa5e045603c0c5d61 | Bin
.../d7/c5f17aae8b068b15dfcb91875bb43adbeb20bb | Bin
.../d8/7cb8ab35d0bdd30e5cdec65d014965b6341f50 | Bin
.../d8/8b642424b4b1e5b50b40ebab41b83723b6b7b8 | Bin
.../d8/8f1c206f3375dac7dce5bc1b0ef45fed058837 | Bin
.../d9/0b5c9093f704aca73664fcd132e03ed2ff115e | Bin
.../d9/24957329276367c6bae3d982099edd7348b460 | Bin
.../d9/6e6e2afa6e66fc91ad01eedd026643be470334 | Bin
.../db/7b454b402fc847804220358387f7c6582d938e | Bin
.../dc/69972b03973448aaca03859a32db7c7ac069c1 | Bin
.../dc/7cadc19b0f9cd06bfe54f0310383ae8c4ee8da | Bin
.../dc/b29cfaaa8445902b94cea9fdef216bf2316b7a | Bin
.../dc/c5c978f92a445fbb5da4352c45b05d8f1babcc | Bin
.../dd/5ce490a3fa10ce2219fcb3f65ba3a11419941c | Bin
.../dd/8ca3949d0b7dce2926083370e7d22a9364d57d | Bin
.../dd/e8cfaf22687175c5a92ab3497b6b3495133a12 | Bin
.../dd/f5d0f485f4c7bf07f1200d1b0d70b30e7cda43 | Bin
.../de/149c9b7b277dab734a599ed0826d582974b5fe | Bin
.../de/185b28707d3b8388563ac454cb5dd8bac50b4b | Bin
.../de/29cef92e4492e218c25e0610410fd83da1bd92 | Bin
.../de/9460f931b697223558606dae3f466b211f0afd | Bin
.../de/9af775cac390862b3baf322f2c8be5c837c32c | Bin
.../e0/0bebc0c00a00ee1b4fa0ad162568a593742b2d | Bin
.../e0/a9a11e0dbb9e157e4674a9a1c337dc850e2816 | Bin
.../e1/1134d730eac67ffd6837eb1ce7856d483d065c | Bin
.../e1/5c068482520bd48e3e944f7bfdb6bcbbed8ecf | Bin
.../e1/626a69fed8ddb59b87978740b7bb89e8a3f470 | Bin
.../e1/84579329e67997a3577c63d0e62c3a483bd29b | 0
.../e1/fdc6ff753c19c95cfacf6b2bd5fa2bc8afbbc5 | Bin
.../e3/bcbd9db09db5b2930ac695e6cd33fd48c822e0 | Bin
.../e4/95280b35195501c9f7a2fe21f0e36d70adfec2 | Bin
.../e4/977f6c90b3c7f26126cb7c4664827cdf30ca46 | 0
.../e4/9df78a071574459a1db00aebafd69b41350977 | Bin
.../e4/c08188ae246e57bee8f908f22023d00b00e355 | Bin
.../e5/f32cdea2cbd114ab51d0969246d482becd1c47 | Bin
.../e6/661ba698e5f4b88e0874c72d70242cbb7369ca | Bin
.../e6/6bc7381b3d8250a08853c5fceff6b5f7cb6d63 | Bin
.../e6/f688458b9562a0077c0547c6223481afdbfa45 | Bin
.../e7/105fc5009f6d014c581825f27c4935a6f724ac | Bin
.../e7/bc2be9e7192fda6897c7db8a142a63a2dd9137 | Bin
.../e8/9a0a2d18fbf3878353467e411eb27149f5bbb4 | Bin
.../e9/3fbc0b9a3316f16c0e806289f2554ca62af655 | Bin
.../e9/8f8a090ee8d8500568646f514f4cd66b340a73 | Bin
.../eb/929904c99d4bde19fb0f26256e8577a6b46b4d | Bin
.../ec/734cdf8057fccf05dd215bc799d7cf06cdcefd | Bin
.../ec/87872edd85e94af50a60a3741cda7c65d92947 | Bin
.../ec/bf77c45c3c930c946779891d7331f1add5bea8 | Bin
.../ed/67b4e9474db758abaed2bff4379e8f6149e23a | Bin
.../ed/7f4ffe6971776c862dcfb8b6f7547c16cf9373 | Bin
.../ed/fa48920de4b47ec239751f7df565acc2f33328 | Bin
.../ee/14d064555db9735223520adcbf25e90d9acac4 | Bin
.../ee/21854feb8a0dbca4c118d3e810701cf4ae260b | Bin
.../ee/38af71545782e8c9bf7a3f8bbb3b8a0685d571 | Bin
.../ee/88c770b67440067a5a7cab9a923571eb81b26a | Bin
.../ee/ce696eae3274ae4e96ac4f05f38919f50634c3 | Bin
.../ef/3baf523b5d00ce1489ac9ea2928cd708add449 | Bin
.../ef/59d4de7d8cc1470a5436a9952370df8c5eb98c | 0
.../ef/81282cc0d2c587277b3659acee21c66cb163f5 | Bin
.../f0/5c892de9bfa5e1fb95df5e2216c460ca17904f | Bin
.../f0/a56a63e3e9c48a4992f7751c2d88a5246613b7 | Bin
.../f0/cffee0efca301c4af7b4bc6e155aaa862e04a9 | Bin
.../f0/da805e6b74e14e00d511cbc041a86bcf14c6aa | Bin
.../f0/e0e08d12ed54f0d19b9ba71bf2ab74790167f3 | Bin
.../f1/2ed85ad8faa0193be177dba82abd1d3ae7f4ba | Bin
.../f1/2f19ebbaecb28f4a5d4475d9aaf935607cccab | Bin
.../f1/a6541cb00cd209e28a9345d8eeb9474a4155bb | Bin
.../f2/1a4ec5e47e9f6e64fb5949d8616231df448df3 | 0
.../f2/37adb21a7477762f0122297b2393b719c8d5f2 | Bin
.../f2/837e45e68fc6a989a0bb07b3c392373bb435ec | Bin
.../f2/e078b4323cddfbf5258c5824799aaff2198c03 | Bin
.../f2/f208f258a1a6e6247ec138c1a16eb63138d4db | Bin
.../f3/18e05a703f7a17c43cfaf6bc9fd6fed3b9132d | Bin
.../f3/3fd1022d33f551685c2e1bd0b8b250c1670fee | Bin
.../f4/88d5c2c6b0ea1bcffb2bdb781d11a90da3f30f | Bin
.../f4/985a3355e3682c4c1d5353a73299f746cf8cd3 | Bin
.../f4/ef196827ca598a0bf508e84b5e79517fbaf423 | Bin
.../f5/1846ce0cffc88f92eb8129bc3eeb74c8548361 | Bin
.../f5/1d5d490c34af80bec89c9c316f8b93dabe7075 | Bin
.../f6/8dfd6f9c60cf2a70229b99aa5050ba64f89cbb | Bin
.../f7/296fce3da50b37ec1182bc1d50bf5ec1cea484 | Bin
.../f7/5da367769fe7f59ee642212a284d050b892b54 | Bin
.../f7/80dd9d10438c0ec6c101111ed792573548e7b3 | Bin
.../f8/cd545d362800ca6b3b10f3a7d035c11b1acb59 | Bin
.../f9/e78b865489bda4fcbab4740758d177834d74f2 | Bin
.../fa/0278fcea01adf22d33a38745bf40ae6c87f31f | Bin
.../fa/4bc8bd51a03dea8e08c230ad3b2a8094e6f02a | Bin
.../fa/74c16f18af88c53b5e7ab84e71e58296b39a93 | Bin
.../fa/a310bf2ade2d48a7109b3b775dd7679a122b7e | Bin
.../fb/5adc6f9e42463ce519816f8d6c932130ce43bb | Bin
.../fc/8a8495f12c9756263c0ee89805f370c7a52f61 | Bin
.../fc/8b822962627c46022b85b53c5e0b5624b69907 | Bin
.../fc/f50ed004fe10291906cd1accbf85cc945c333a | Bin
.../fd/bee0fa324a30960a9c6c9457358feb91e64478 | Bin
.../fd/d0db6df282cd7c895573134e6dd2f2dd0158d6 | Bin
.../fd/eed91ce0012fabc6c0d8ba225a9fb308cb3d46 | Bin
.../fe/d5ab008e6c98379ca65cef433deacf73737ad1 | Bin
.../fe/d6354902617f8485f6d521b4006e6ea14d76e7 | Bin
.../fe/e0b5434a18776718410da56b7ecddf07ec23d4 | Bin
.../fe/eea53d90bba6247f2620912acf32a5908945cb | Bin
.../ff/a1f5203dd3249a2a3be1eaa30e2918923e18ef | Bin
.../ff/f1ac0f73b3a9ebeb0c256a66437286c12716f6 | Bin
.../ff/f4371c33c25dc5bf801486d0990ca232dc174d | Bin
...64d5291e8936e45e8afe09b48196d375cda344.idx | Bin
...4d5291e8936e45e8afe09b48196d375cda344.pack | Bin
...64d5291e8936e45e8afe09b48196d375cda344.rev | Bin
...653ebedd073ec8a15e1120e171acbb71747199.idx | Bin
...53ebedd073ec8a15e1120e171acbb71747199.pack | Bin
...653ebedd073ec8a15e1120e171acbb71747199.rev | Bin
...5825c0d6dc5992012cc7de38d279d83828267a.idx | Bin
...825c0d6dc5992012cc7de38d279d83828267a.pack | Bin
...5825c0d6dc5992012cc7de38d279d83828267a.rev | Bin
...6ff917ed314b5db03ad3443e492f49040bb9c6.idx | Bin
...ff917ed314b5db03ad3443e492f49040bb9c6.pack | Bin
...6ff917ed314b5db03ad3443e492f49040bb9c6.rev | Bin
...01966aedc27238be3fb9f90efd4421dbbfa1fd.idx | Bin
...1966aedc27238be3fb9f90efd4421dbbfa1fd.pack | Bin
...01966aedc27238be3fb9f90efd4421dbbfa1fd.rev | Bin
...237b01850fa3d74f9b203407d5c6dec9f47238.idx | Bin
...37b01850fa3d74f9b203407d5c6dec9f47238.pack | Bin
...237b01850fa3d74f9b203407d5c6dec9f47238.rev | Bin
...4962ea43ef03cb47613de5c48ab3ba54a3b119.idx | Bin
...962ea43ef03cb47613de5c48ab3ba54a3b119.pack | Bin
...4962ea43ef03cb47613de5c48ab3ba54a3b119.rev | Bin
.../.git_disabled => .git_disabled}/opencode | 0
.../packed-refs | 0
.../refs/heads/cyh666666/consumer | 0
.../refs/heads/main | 0
.../refs/remotes/origin/HEAD | 0
.../refs/remotes/origin/comclib-analytics | 0
.../refs/remotes/origin/cyh666666/consumer | 0
.../refs/remotes/origin/huangzhenbao-admin | 0
.../refs/remotes/origin/main | 0
.../refs/remotes/origin/ysj-delivery | 0
.../refs/tags/v-1.0.0 | 0
App.uvue | 169 +-
_debug_branches.txt | Bin 0 -> 466 bytes
_debug_gitlog.txt | Bin 0 -> 3048 bytes
_debug_last_commit_files.txt | Bin 0 -> 1384 bytes
_debug_reflog.txt | Bin 0 -> 2498 bytes
ak/config.uts | 16 +-
mall/ak/config.uts => ak/config_fixed.uts | 9 +-
{mall/ak => ak}/configbackup.uts | 0
{mall/ak => ak}/configme.uts | 0
check_products.py | 62 +
check_schema_coupons.py | 55 +
check_shop_exists.py | 34 +
check_table_exists.py | 12 +
components/supadb/aksupa.uts | 3 +-
.../consumer/sql/01_wallet_and_points.sql | 0
.../consumer/sql/03_wallet_functions.sql | 0
main.uts | 2 -
mall/.eslintrc.js | 27 -
mall/.gitignore | 46 -
mall/.hbuilderx/launch.json | 9 -
mall/00_READ_ME_FIRST.md | 480 ---
mall/ADMIN_LAYOUT_GUIDE.md | 272 --
mall/ADMIN_LAYOUT_IMPLEMENTATION_COMPLETE.md | 189 --
mall/ADMIN_LAYOUT_PROGRESS_REPORT.md | 73 -
...DMIN_LAYOUT_TRANSFORMATION_100_COMPLETE.md | 179 -
mall/ADMIN_LAYOUT_TRANSFORMATION_COMPLETE.md | 205 --
mall/ADMIN_PAGE_CHECKLIST.csv | 77 -
mall/ADMIN_PAGE_COMPLETE.md | 353 --
mall/ADMIN_PAGE_COMPLIANCE_CHECKLIST.md | 382 ---
mall/ADMIN_PAGE_INDEX.md | 354 --
mall/ADMIN_PAGE_MODIFICATION_PLAN.md | 407 ---
mall/ADMIN_PAGE_QUICK_REFERENCE.md | 313 --
mall/ADMIN_PAGE_START_HERE.md | 399 ---
mall/ADMIN_PAGE_SUMMARY.md | 397 ---
mall/ADMIN_SIDEBAR_COMPLETE_GUIDE.md | 422 ---
mall/App.uvue | 413 ---
mall/CRMEB_DASHBOARD_README.md | 570 ----
mall/CRMEB_ROUTE_FIX_LOG.md | 188 --
mall/FINAL_COMPLETION_REPORT.md | 432 ---
mall/IMPORT_RESOLUTION_FIX.md | 89 -
mall/PAGES_ROUTES.md | 112 -
mall/PHASE_2_COMPLETION_REPORT.md | 338 --
mall/PHASE_2_INDEX.md | 347 --
mall/PHASE_2_QUICK_REFERENCE.md | 256 --
mall/PHASE_2_VERIFICATION_CHECKLIST.md | 264 --
mall/README.md | 56 -
mall/ROUTING_FIX_REPORT.md | 44 -
mall/SESSION_COMPLETION_SUMMARY.md | 364 ---
mall/SYSTEM_INFO_DIAGNOSIS.md | 306 --
mall/_admin_missing_files.txt | 12 -
mall/_admin_missing_in_json.txt | 25 -
mall/_admin_routes.txt | 116 -
.../analytics/AnalyticsAreaChart.uvue | 125 -
.../analytics/AnalyticsBarMini.uvue | 60 -
.../analytics/AnalyticsComboChart.uvue | 246 --
.../analytics/AnalyticsDateRangePicker.uvue | 129 -
.../analytics/AnalyticsDonutChart.uvue | 70 -
.../analytics/AnalyticsMultiLineChart.uvue | 123 -
.../analytics/AnalyticsPieChart.uvue | 115 -
.../analytics/AnalyticsRegionMap.uvue | 379 ---
.../analytics/AnalyticsSidebarMenu.uvue | 435 ---
.../components/analytics/AnalyticsTopBar.uvue | 332 --
.../analytics/AnalyticsUserGenderSection.uvue | 176 -
.../analytics/AnalyticsUserMapTable.uvue | 242 --
mall/components/analytics/ChartCard.uvue | 57 -
mall/components/analytics/KpiCard.uvue | 98 -
mall/components/analytics/PeriodTabs.uvue | 49 -
.../components/analytics/charts/AreaLine.uvue | 23 -
.../analytics/charts/ComboBarLine.uvue | 23 -
.../components/analytics/charts/DonutPie.uvue | 23 -
mall/components/supadb/RegionSelector.uvue | 533 ---
mall/components/supadb/SESSION_RECOVERY.md | 41 -
mall/components/supadb/aksupa - 副本.uts | 1027 ------
mall/components/supadb/aksupa.uts | 1136 -------
.../supadb/aksupainstance - 副本.uts | 18 -
mall/components/supadb/aksupainstance.uts | 34 -
mall/components/supadb/aksuparealtime.uts | 277 --
mall/components/supadb/docs/CHANGELOG.md | 22 -
.../supadb/docs/SIMPLIFIED_API_GUIDE.md | 155 -
.../supadb/docs/TYPED_QUERIES_README.md | 194 --
.../docs/TYPE_CONVERSION_FIX_SUMMARY.md | 126 -
mall/components/supadb/docs/aksupareal.md | 56 -
mall/components/supadb/rag.uts | 36 -
mall/components/supadb/raginstance.uts | 7 -
mall/components/supadb/supadb.uvue | 364 ---
mall/components/supadb/typed-examples.uts | 122 -
mall/create_placeholder_pages.py | 177 -
mall/doc_mall/FRONTEND_BACKEND_DEBUGGING.md | 875 -----
mall/doc_mall/MIGRATION_CHECKLIST.md | 254 --
mall/doc_mall/MIGRATION_GUIDE.md | 542 ----
mall/doc_mall/MIGRATION_SUMMARY.md | 180 --
mall/doc_mall/MODULE_ANALYSIS.md | 710 ----
mall/doc_mall/QUICK_START_MIGRATION.md | 111 -
mall/doc_mall/README.md | 216 --
mall/doc_mall/README_subscription_consumer.md | 16 -
.../doc_mall/SUPABASE_DATA_MIGRATION_GUIDE.md | 247 --
mall/doc_mall/TECHNICAL_IMPLEMENTATION.md | 1431 --------
.../analysis/user_compatibility_analysis.md | 195 --
mall/doc_mall/consumer/sql/add_coupons.sql | 24 -
.../consumer/sql/add_footprints_table.sql | 43 -
.../sql/add_messages_and_notifications.sql | 98 -
.../consumer/sql/add_order_notification.sql | 14 -
mall/doc_mall/consumer/sql/clean_cart.sql | 2 -
.../consumer/sql/complete_mall_database.sql | 1377 --------
.../sql/create_mall_subscription_tables.sql | 71 -
.../sql/create_supabase_auth_users.sql | 0
.../consumer/sql/fix_product_categories.sql | 150 -
.../consumer/sql/insert_default_skus.sql | 40 -
.../consumer/sql/insert_extra_products.sql | 88 -
.../sql/insert_missing_category_products.sql | 281 --
.../sql/insert_specific_category_products.sql | 156 -
.../consumer/sql/insert_test_addresses.sql | 105 -
.../consumer/sql/mall_alter_upgrade.sql | 692 ----
.../consumer/sql/mall_database_check.sql | 332 --
.../consumer/sql/mall_fields_only_upgrade.sql | 734 -----
mall/doc_mall/consumer/sql/mall_migration.sql | 868 -----
.../consumer/sql/mall_seo_security.sql | 666 ----
.../consumer/sql/mock_data_insert.sql | 1180 -------
.../consumer/sql/product_database.sql | 452 ---
.../consumer/sql/quick_role_migration.sql | 249 --
.../consumer/sql/role_field_cleanup.sql | 207 --
.../consumer/sql/role_field_unification.sql | 287 --
.../consumer/sql/simulate_multi_shop.sql | 62 -
.../sql/subscription_guard_trigger.sql | 47 -
.../sql/subscription_rls_policies.sql | 119 -
.../sql/update_product_attributes.sql | 58 -
.../sql/update_product_attributes_refined.sql | 147 -
.../sql/update_product_attributes_taobao.sql | 92 -
.../sql/user_compatibility_implementation.sql | 273 --
.../doc_mall/consumer/sql/validation_test.sql | 113 -
.../consumer/sql/verify_mock_data_fix.sql | 113 -
.../database/ROLE_FIELD_FIX_REPORT.md | 151 -
mall/doc_mall/database/ROLE_FIELD_SUMMARY.md | 172 -
mall/doc_mall/database/UPGRADE_GUIDE.md | 402 ---
.../database/VARIABLE_CONFLICT_FIX_REPORT.md | 224 --
.../database/complete_deployment_guide.md | 231 --
.../database/create_supabase_auth_users.js | 365 ---
.../database/database_creation_report.md | 186 --
.../database/database_syntax_fix_report.md | 153 -
mall/doc_mall/database/deployment_guide.md | 223 --
.../database/mock_data_documentation.md | 194 --
.../database/seo_optimization_guide.md | 333 --
.../database/seo_optimization_report.md | 247 --
.../database/type_error_fix_report.md | 153 -
mall/doc_mall/migrate.ps1 | 190 --
mall/doc_mall/migrate.sh | 178 -
mall/doc_mall/migration_complete_report.md | 105 -
mall/doc_mall/reports/PAYMENT_PAGE_GUIDE.md | 75 -
mall/doc_mall/reports/detail_pages_report.md | 253 --
mall/doc_mall/reports/profile_pages_report.md | 209 --
.../reports/system_generation_report.md | 204 --
mall/doc_mall/user_reuse_summary.md | 138 -
mall/doc_mall/裂变红包.md | 236 --
mall/docs/ADMIN_MANAGEMENT_GUIDE.md | 594 ----
mall/docs/AGENT_PROJECT_SPEC.md | 325 --
mall/docs/CRMEB_DASHBOARD_GUIDE.md | 475 ---
mall/docs/CRMEB_TO_UVUE_MIGRATION_GUIDE.md | 807 -----
mall/docs/FRONTEND_ARCHITECTURE_ANALYSIS.md | 427 ---
mall/docs/PAGE_STRUCTURE_ANALYSIS.md | 292 --
mall/docs/UNI_APP_X_PAGE_FIX_GUIDE.md | 1752 ----------
mall/docs/admin/00_READ_ME_FIRST.md | 480 ---
mall/docs/admin/ADMIN_LAYOUT_GUIDE.md | 272 --
.../ADMIN_LAYOUT_IMPLEMENTATION_COMPLETE.md | 189 --
.../admin/ADMIN_LAYOUT_PROGRESS_REPORT.md | 73 -
...DMIN_LAYOUT_TRANSFORMATION_100_COMPLETE.md | 179 -
.../ADMIN_LAYOUT_TRANSFORMATION_COMPLETE.md | 205 --
mall/docs/admin/ADMIN_MANAGEMENT_GUIDE.md | 594 ----
.../admin/ADMIN_PAGES_REFACTORING_PLAN.md | 206 --
mall/docs/admin/ADMIN_PAGE_CHECKLIST.csv | 77 -
mall/docs/admin/ADMIN_PAGE_COMPLETE.md | 353 --
.../admin/ADMIN_PAGE_COMPLIANCE_CHECKLIST.md | 382 ---
mall/docs/admin/ADMIN_PAGE_INDEX.md | 354 --
.../admin/ADMIN_PAGE_MODIFICATION_PLAN.md | 407 ---
mall/docs/admin/ADMIN_PAGE_QUICK_REFERENCE.md | 313 --
mall/docs/admin/ADMIN_PAGE_START_HERE.md | 399 ---
mall/docs/admin/ADMIN_PAGE_SUMMARY.md | 397 ---
mall/docs/admin/ADMIN_PROJECT_FINAL_REPORT.md | 297 --
mall/docs/admin/ADMIN_REFACTOR_INDEX.md | 1 -
mall/docs/admin/ADMIN_REFACTOR_PROGRESS.md | 239 --
mall/docs/admin/COMPONENT_SPECIFICATION.md | 1258 --------
mall/docs/admin/CRMEB_DASHBOARD_GUIDE.md | 475 ---
.../admin/CRMEB_TO_UVUE_MIGRATION_GUIDE.md | 807 -----
mall/docs/admin/CRMEB_UVUE_MIGRATION_GUIDE.md | 1275 --------
mall/docs/admin/DELIVERY_SUMMARY.md | 450 ---
mall/docs/admin/DESIGN_DECORATION_GUIDE.md | 803 -----
.../admin/DESIGN_IMPLEMENTATION_REPORT.md | 382 ---
.../admin/DESIGN_MODULE_UPGRADE_REPORT.md | 256 --
mall/docs/admin/DESIGN_MODULE_USER_GUIDE.md | 276 --
mall/docs/admin/DESIGN_QUICK_REFERENCE.md | 274 --
mall/docs/admin/ENGINEERING_BEST_PRACTICES.md | 761 -----
.../admin/FRONTEND_ARCHITECTURE_ANALYSIS.md | 427 ---
mall/docs/admin/IMPLEMENTATION_ROADMAP.md | 456 ---
.../ORDER_MENU_HIGHLIGHT_COMPLETION_REPORT.md | 237 --
mall/docs/admin/ORDER_MENU_HIGHLIGHT_FIX.md | 290 --
.../admin/ORDER_MENU_HIGHLIGHT_QUICK_FIX.md | 77 -
mall/docs/admin/PAGES_ROUTES.md | 112 -
mall/docs/admin/PAGE_STRUCTURE_ANALYSIS.md | 292 --
.../admin/PAGE_STRUCTURE_SPECIFICATION.md | 1507 ---------
mall/docs/admin/PROJECT_COMPLETION_REPORT.md | 486 ---
mall/docs/admin/QUICK_REFERENCE.md | 334 --
.../docs/admin/QUICK_START_NEW_DEVELOPMENT.md | 425 ---
mall/docs/admin/README.md | 533 ---
mall/docs/admin/REFACTOR_BEFORE_AFTER.md | 419 ---
mall/docs/admin/REFACTOR_SUMMARY.md | 321 --
mall/docs/admin/SERVICE_DELIVERY_CHECKLIST.md | 604 ----
.../admin/SERVICE_MODULE_IMPLEMENTATION.md | 725 -----
mall/docs/admin/SERVICE_PROJECT_SUMMARY.md | 452 ---
mall/docs/admin/SERVICE_QUICK_START.md | 409 ---
mall/docs/admin/STYLE_SPECIFICATION.md | 955 ------
mall/docs/admin/SYSTEM_INFO_FIX_GUIDE.md | 136 -
mall/docs/admin/SYSTEM_INFO_ROOT_CAUSE.md | 128 -
mall/docs/admin/SYSTEM_INFO_SIDEBAR_FIX.md | 232 --
mall/docs/admin/UNI_APP_X_PAGE_FIX_GUIDE.md | 1612 ---------
mall/docs/sql/00_overview.md | 32 -
mall/docs/sql/01_tables_catalog.md | 236 --
mall/docs/sql/02_relationships_er.md | 147 -
mall/docs/sql/03_enums_status_dict.md | 213 --
mall/docs/sql/04_triggers_and_functions.md | 240 --
mall/docs/sql/05_rls_permissions_matrix.md | 159 -
.../docs/sql/06_indexes_and_query_patterns.md | 179 -
mall/docs/sql/07_business_workflows.md | 333 --
.../sql/08_data_consistency_boundaries.md | 116 -
mall/docs/sql/09_migrations_and_versions.md | 126 -
mall/docs/sql/10_quality_checks.md | 91 -
.../sql/11_roles_and_permissions_strategy.md | 184 --
mall/docs/sql/README.md | 17 -
mall/docs/sql_summary.md | 90 -
mall/index.html | 24 -
mall/layouts/admin/AdminLayout.uvue | 228 --
.../admin/CRMEB_ROUTER_MIGRATION_COMPLETE.md | 306 --
mall/layouts/admin/README.md | 217 --
.../layouts/admin/ROUTING_CLEANUP_COMPLETE.md | 208 --
mall/layouts/admin/components/AdminAside.uvue | 195 --
.../layouts/admin/components/AdminFooter.uvue | 20 -
.../layouts/admin/components/AdminHeader.uvue | 87 -
.../admin/components/AdminSubsider.uvue | 132 -
.../admin/components/AdminTagsView.uvue | 80 -
.../layouts/admin/components/AdminTopBar.uvue | 0
.../admin/components/PlaceholderPage.uvue | 76 -
mall/layouts/admin/components/card.uvue | 94 -
mall/layouts/admin/index.uvue | 7 -
mall/layouts/admin/pages/HomeIndex.uvue | 491 ---
.../admin/router/adminComponentMap.uts | 132 -
mall/layouts/admin/router/adminRoutes.uts | 633 ----
mall/layouts/admin/state.uts | 10 -
mall/layouts/admin/store/adminNavStore.uts | 203 --
mall/layouts/admin/types.uts | 46 -
mall/layouts/admin/utils/echarts-config.uts | 691 ----
mall/layouts/admin/utils/nav.uts | 95 -
mall/layouts/admin/utils/tabs.uts | 33 -
mall/main.js | 2 -
mall/main.uts | 18 -
mall/mall_sql/README.md | 354 --
mall/mall_sql/deploy.bat | 201 --
mall/mall_sql/deploy.sh | 247 --
.../docs/FRONTEND_BACKEND_DEBUGGING.md | 875 -----
mall/mall_sql/docs/MALL_README.md | 216 --
mall/mall_sql/docs/MIGRATION_CHECKLIST.md | 254 --
mall/mall_sql/docs/MIGRATION_GUIDE.md | 542 ----
mall/mall_sql/docs/MIGRATION_SUMMARY.md | 180 --
mall/mall_sql/docs/MODULE_ANALYSIS.md | 710 ----
mall/mall_sql/docs/QUICK_START_MIGRATION.md | 111 -
mall/mall_sql/docs/README.md | 108 -
.../docs/README_subscription_consumer.md | 16 -
mall/mall_sql/docs/ROLE_FIELD_FIX_REPORT.md | 151 -
mall/mall_sql/docs/ROLE_FIELD_SUMMARY.md | 172 -
.../mall_sql/docs/TECHNICAL_IMPLEMENTATION.md | 1431 --------
mall/mall_sql/docs/UNI_APP_X_MIGRATION.md | 198 --
mall/mall_sql/docs/UPGRADE_GUIDE.md | 402 ---
.../docs/VARIABLE_CONFLICT_FIX_REPORT.md | 224 --
.../analysis/user_compatibility_analysis.md | 195 --
.../docs/complete_deployment_guide.md | 231 --
.../mall_sql/docs/database_creation_report.md | 186 --
.../docs/database_syntax_fix_report.md | 153 -
mall/mall_sql/docs/deployment_guide.md | 223 --
.../docs/migration_complete_report.md | 105 -
mall/mall_sql/docs/mock_data_documentation.md | 194 --
.../docs/reports/detail_pages_report.md | 253 --
.../docs/reports/profile_pages_report.md | 209 --
.../docs/reports/system_generation_report.md | 204 --
mall/mall_sql/docs/seo_optimization_guide.md | 333 --
mall/mall_sql/docs/seo_optimization_report.md | 247 --
mall/mall_sql/docs/type_error_fix_report.md | 153 -
mall/mall_sql/docs/user_reuse_summary.md | 138 -
mall/mall_sql/docs/裂变红包.md | 236 --
.../mall_sql/migrations/analytics_upgrade.sql | 274 --
.../migrations/mall_alter_upgrade.sql | 692 ----
.../migrations/mall_fields_only_upgrade.sql | 734 -----
mall/mall_sql/migrations/mall_migration.sql | 868 -----
.../mall_sql/migrations/ml_analytics_rpcs.sql | 246 --
.../migrations/quick_role_migration.sql | 249 --
.../migrations/role_field_cleanup.sql | 207 --
.../migrations/role_field_unification.sql | 287 --
.../user_compatibility_implementation.sql | 273 --
.../schemas/ak_contents_product_extension.sql | 110 -
.../schemas/complete_mall_database.sql | 1377 --------
mall/mall_sql/schemas/mall_seo_security.sql | 666 ----
mall/mall_sql/schemas/product_database.sql | 452 ---
mall/mall_sql/scripts/migrate.ps1 | 190 --
mall/mall_sql/scripts/migrate.sh | 178 -
.../create_mall_subscription_tables.sql | 2 -
.../subscription_guard_trigger.sql | 47 -
.../subscription_rls_policies.sql | 2 -
.../tests/create_supabase_auth_users.sql | 0
mall/mall_sql/tests/mall_database_check.sql | 332 --
mall/mall_sql/tests/mock_data_insert.sql | 1180 -------
mall/mall_sql/tests/validation_test.sql | 113 -
mall/mall_sql/tests/verify_mock_data_fix.sql | 113 -
mall/manifest.json | 74 -
mall/package-lock.json | 1406 --------
mall/package.json | 16 -
mall/pages-simple.json | 10 -
mall/pages.json | 660 ----
mall/pages/SQL_FILES_CLEANUP_SUMMARY.md | 115 -
mall/pages/SQL_FILES_ORGANIZATION.md | 119 -
mall/pages/dashboard/OrderChart.uvue | 345 --
mall/pages/dashboard/PurchaseUserPie.uvue | 207 --
mall/pages/dashboard/UserTrendChart.uvue | 370 ---
mall/pages/info/README.md | 429 ---
mall/pages/info/chat.uvue | 1109 -------
mall/pages/info/comindex.uvue | 2860 ----------------
mall/pages/info/cominfoedit.uvue | 370 ---
mall/pages/info/comments.uvue | 1000 ------
mall/pages/info/detail.uvue | 1106 -------
mall/pages/info/index.uvue | 934 ------
mall/pages/info/search.uvue | 1397 --------
mall/pages/info/settings.uvue | 1126 -------
mall/pages/info/test-utils.uts | 258 --
mall/pages/info/test/i18n-test.uvue | 37 -
mall/pages/info/topic-detail.uvue | 915 ------
mall/pages/info/topics.uvue | 829 -----
mall/pages/info/types.uts | 708 ----
mall/pages/info/video-player.uvue | 1204 -------
mall/pages/info/video-types.uts | 277 --
mall/pages/llm/asr.uvue | 137 -
mall/pages/mall/admin/article/article.uts | 185 --
.../mall/admin/article/articleCategory.uts | 178 -
mall/pages/mall/admin/article/category.uvue | 25 -
mall/pages/mall/admin/article/create.uvue | 25 -
mall/pages/mall/admin/article/edit.uvue | 25 -
mall/pages/mall/admin/article/index.uvue | 25 -
mall/pages/mall/admin/cms/article/list.uvue | 81 -
mall/pages/mall/admin/cms/category/list.uvue | 81 -
mall/pages/mall/admin/content/index.uvue | 65 -
.../admin/customer-service/auto-reply.uvue | 98 -
.../mall/admin/customer-service/config.uvue | 98 -
.../mall/admin/customer-service/list.uvue | 97 -
.../mall/admin/customer-service/messages.uvue | 98 -
.../mall/admin/customer-service/script.uvue | 98 -
mall/pages/mall/admin/design/README.md | 179 -
mall/pages/mall/admin/design/category.uvue | 25 -
mall/pages/mall/admin/design/components.uvue | 25 -
mall/pages/mall/admin/design/config.uts | 439 ---
mall/pages/mall/admin/design/custom.uvue | 25 -
mall/pages/mall/admin/design/data-config.uvue | 38 -
mall/pages/mall/admin/design/design.uts | 549 ----
mall/pages/mall/admin/design/homepage.uvue | 25 -
mall/pages/mall/admin/design/index.uvue | 65 -
.../mall/admin/design/link-management.uvue | 38 -
mall/pages/mall/admin/design/material.uvue | 38 -
mall/pages/mall/admin/design/product.uvue | 25 -
mall/pages/mall/admin/design/templates.uvue | 162 -
mall/pages/mall/admin/design/theme-style.uvue | 38 -
mall/pages/mall/admin/design/user.uvue | 38 -
mall/pages/mall/admin/finance/record.uvue | 81 -
.../homePage/components/KpiMiniCard.uvue | 187 --
mall/pages/mall/admin/homePage/index.uvue | 24 -
mall/pages/mall/admin/homePage/index.uvue.bak | 483 ---
mall/pages/mall/admin/index_new.uvue | 13 -
.../mall/admin/maintain/data/city-data.uvue | 24 -
.../mall/admin/maintain/data/clear-data.uvue | 21 -
.../maintain/data/logistics-company.uvue | 21 -
.../admin/maintain/dev-config/category.uvue | 22 -
.../maintain/dev-config/combination-data.uvue | 23 -
.../admin/maintain/dev-config/cron-job.uvue | 22 -
.../maintain/dev-config/custom-event.uvue | 22 -
.../maintain/dev-config/module-config.uvue | 22 -
.../admin/maintain/dev-config/permission.uvue | 22 -
.../mall/admin/maintain/dev-tools/api.uvue | 21 -
.../admin/maintain/dev-tools/codegen.uvue | 13 -
.../admin/maintain/dev-tools/data-dict.uvue | 12 -
.../admin/maintain/dev-tools/database.uvue | 12 -
.../mall/admin/maintain/dev-tools/file.uvue | 12 -
.../mall/admin/maintain/external/account.uvue | 13 -
.../admin/maintain/i18n/language-detail.uvue | 12 -
.../admin/maintain/i18n/language-list.uvue | 12 -
.../mall/admin/maintain/i18n/region-list.uvue | 12 -
.../admin/maintain/i18n/translate-config.uvue | 12 -
.../maintain/security/online-upgrade.uvue | 12 -
.../maintain/security/refresh-cache.uvue | 12 -
.../admin/maintain/security/system-log.uvue | 12 -
.../mall/admin/maintain/system-info.uvue | 17 -
.../mall/admin/marketing-management.uvue | 64 -
.../mall/admin/marketing/bargain/list.uvue | 81 -
.../admin/marketing/combination/list.uvue | 81 -
.../mall/admin/marketing/coupon/list.uvue | 65 -
.../mall/admin/marketing/coupon/receive.uvue | 65 -
.../mall/admin/marketing/groupbuy/goods.uvue | 27 -
.../mall/admin/marketing/groupbuy/list.uvue | 27 -
mall/pages/mall/admin/marketing/index.uvue | 26 -
.../mall/admin/marketing/integral/list.uvue | 81 -
.../mall/admin/marketing/live/anchor.uvue | 27 -
.../mall/admin/marketing/live/goods.uvue | 27 -
.../pages/mall/admin/marketing/live/room.uvue | 27 -
.../mall/admin/marketing/lottery/config.uvue | 27 -
.../mall/admin/marketing/lottery/list.uvue | 27 -
.../mall/admin/marketing/member/card.uvue | 27 -
.../mall/admin/marketing/member/config.uvue | 27 -
.../mall/admin/marketing/member/record.uvue | 27 -
.../mall/admin/marketing/member/rights.uvue | 27 -
.../mall/admin/marketing/member/type.uvue | 27 -
mall/pages/mall/admin/marketing/newcomer.uvue | 27 -
.../mall/admin/marketing/points/config.uvue | 27 -
.../mall/admin/marketing/points/goods.uvue | 25 -
.../mall/admin/marketing/points/index.uvue | 95 -
.../mall/admin/marketing/points/order.uvue | 25 -
.../mall/admin/marketing/points/record.uvue | 27 -
.../mall/admin/marketing/points/stats.uvue | 27 -
.../mall/admin/marketing/recharge/amount.uvue | 27 -
.../mall/admin/marketing/recharge/config.uvue | 27 -
.../mall/admin/marketing/recharge/record.uvue | 27 -
.../mall/admin/marketing/seckill/config.uvue | 27 -
.../mall/admin/marketing/seckill/goods.uvue | 27 -
.../mall/admin/marketing/seckill/list.uvue | 87 -
.../mall/admin/marketing/signin/record.uvue | 65 -
.../mall/admin/marketing/signin/rule.uvue | 65 -
mall/pages/mall/admin/order-management.uvue | 70 -
.../admin/order/aftersales-order/index.uvue | 23 -
.../mall/admin/order/cashier-order/index.uvue | 23 -
mall/pages/mall/admin/order/list.uvue | 482 ---
.../order/order-configuration/index.uvue | 23 -
.../admin/order/order-management/index.uvue | 25 -
.../admin/order/order-statistics/index.uvue | 604 ----
.../admin/order/write-off-records/index.uvue | 23 -
.../mall/admin/product-classification.uvue | 64 -
mall/pages/mall/admin/product-labels.uvue | 64 -
mall/pages/mall/admin/product-management.uvue | 64 -
mall/pages/mall/admin/product-parameters.uvue | 64 -
mall/pages/mall/admin/product-protection.uvue | 64 -
mall/pages/mall/admin/product-reviews.uvue | 65 -
.../mall/admin/product-specifications.uvue | 64 -
mall/pages/mall/admin/product-statistics.uvue | 65 -
mall/pages/mall/admin/product/attr.uvue | 81 -
mall/pages/mall/admin/product/classify.uvue | 81 -
mall/pages/mall/admin/product/label.uvue | 81 -
mall/pages/mall/admin/product/list.uvue | 81 -
mall/pages/mall/admin/product/param.uvue | 81 -
.../product/product-classification/index.uvue | 25 -
.../admin/product/product-label/index.uvue | 25 -
.../product/product-management/index.uvue | 25 -
.../admin/product/product-param/index.uvue | 25 -
.../product/product-protection/index.uvue | 26 -
.../admin/product/product-reviews/index.uvue | 25 -
.../product/product-specifications/index.uvue | 26 -
.../product/product-statistics/index.uvue | 26 -
mall/pages/mall/admin/product/protection.uvue | 81 -
mall/pages/mall/admin/product/reply.uvue | 81 -
mall/pages/mall/admin/service/autoReply.uvue | 561 ----
mall/pages/mall/admin/service/config.uvue | 25 -
mall/pages/mall/admin/service/index.uvue | 25 -
mall/pages/mall/admin/service/message.uvue | 544 ----
mall/pages/mall/admin/service/script.uvue | 25 -
mall/pages/mall/admin/service/service.uts | 246 --
.../mall/admin/setting/system/admin.uvue | 81 -
.../mall/admin/setting/system/config.uvue | 81 -
.../pages/mall/admin/setting/system/role.uvue | 81 -
mall/pages/mall/admin/statistic/index.uvue | 81 -
.../admin/subscription/plan-management.uvue | 420 ---
.../subscription/user-subscriptions.uvue | 331 --
mall/pages/mall/admin/system-settings.uvue | 65 -
.../mall/admin/system/agreement-settings.uvue | 84 -
mall/pages/mall/admin/system/api/collect.uvue | 85 -
.../mall/admin/system/api/logistics.uvue | 85 -
mall/pages/mall/admin/system/api/pay.uvue | 85 -
mall/pages/mall/admin/system/api/sms.uvue | 85 -
mall/pages/mall/admin/system/api/storage.uvue | 85 -
mall/pages/mall/admin/system/api/waybill.uvue | 85 -
.../mall/admin/system/api/yht/config.uvue | 85 -
.../pages/mall/admin/system/api/yht/page.uvue | 85 -
mall/pages/mall/admin/system/index.uvue | 27 -
.../mall/admin/system/message-management.uvue | 84 -
.../admin/system/permission/admin-list.uvue | 85 -
.../system/permission/permission-setting.uvue | 85 -
.../mall/admin/system/permission/role.uvue | 85 -
.../mall/admin/system/receipt-settings.uvue | 84 -
.../mall/admin/system/shipping/courier.uvue | 83 -
.../system/shipping/freight-template.uvue | 83 -
.../admin/system/shipping/pickup/points.uvue | 83 -
.../system/shipping/pickup/verifiers.uvue | 83 -
mall/pages/mall/admin/user-management.uvue | 70 -
mall/pages/mall/admin/user-statistics.uvue | 65 -
mall/pages/mall/admin/user/MemberConfig.uvue | 341 --
mall/pages/mall/admin/user/Statistic.uvue | 306 --
mall/pages/mall/admin/user/grade/card.uvue | 81 -
mall/pages/mall/admin/user/grade/record.uvue | 81 -
mall/pages/mall/admin/user/grade/right.uvue | 81 -
mall/pages/mall/admin/user/grade/type.uvue | 81 -
mall/pages/mall/admin/user/group.uvue | 81 -
mall/pages/mall/admin/user/label.uvue | 81 -
mall/pages/mall/admin/user/level.uvue | 81 -
mall/pages/mall/admin/user/list.uvue | 435 ---
.../admin/user/user-configuration/index.uvue | 25 -
.../mall/admin/user/user-grouping/index.uvue | 25 -
.../mall/admin/user/user-label/index.uvue | 25 -
.../mall/admin/user/user-level/index.uvue | 25 -
.../admin/user/user-management/index.uvue | 25 -
.../admin/user/user-statistics/index.uvue | 25 -
.../pages/mall/analytics/coupon-analysis.uvue | 808 -----
mall/pages/mall/analytics/custom-report.uvue | 1043 ------
mall/pages/mall/analytics/data-detail.uvue | 506 ---
.../mall/analytics/delivery-analysis.uvue | 876 -----
.../analytics/docs/ANALYTICS_DB_DESIGN.md | 311 --
.../docs/ANALYTICS_DB_QUICK_START.md | 276 --
.../docs/ANALYTICS_PAGES_ANALYSIS.md | 771 -----
.../analytics/docs/ANALYTICS_UI_DESIGN.md | 665 ----
.../analytics/docs/IMPLEMENTATION_STATUS.md | 269 --
mall/pages/mall/analytics/docs/README.md | 138 -
mall/pages/mall/analytics/docs/URL_ACCESS.md | 182 --
mall/pages/mall/analytics/index.uvue | 1682 ----------
mall/pages/mall/analytics/insight-detail.uvue | 293 --
mall/pages/mall/analytics/market-trends.uvue | 700 ----
.../mall/analytics/product-insights.uvue | 942 ------
mall/pages/mall/analytics/profile.uvue | 1108 -------
mall/pages/mall/analytics/report-detail.uvue | 1031 ------
mall/pages/mall/analytics/sales-report.uvue | 868 -----
.../test/01_ml_analytics_rpcs_user.sql | 232 --
.../test/02_ml_analytics_rpcs_sales.sql | 176 -
.../test/03_ml_analytics_rpcs_dashboard.sql | 76 -
.../04_ml_analytics_rpcs_market_trends.sql | 175 -
.../test/05_ml_analytics_rpcs_product.sql | 194 --
.../test/06_ml_analytics_rpcs_coupon.sql | 183 --
.../test/07_ml_analytics_rpcs_delivery.sql | 85 -
.../08_ml_analytics_rpcs_custom_report.sql | 145 -
.../test/08_ml_analytics_rpcs_data_detail.sql | 53 -
.../test/09_ml_analytics_rpcs_data_detail.sql | 239 --
.../analytics/test/99_ml_analytics_verify.sql | 218 --
mall/pages/mall/analytics/user-analysis.uvue | 952 ------
mall/pages/mall/consumer/address-edit.uvue | 435 ---
.../mall/consumer/address-list copy.uvue | 219 --
mall/pages/mall/consumer/address-list.uvue | 244 --
mall/pages/mall/consumer/address.uvue | 918 ------
mall/pages/mall/consumer/apply-refund.uvue | 272 --
mall/pages/mall/consumer/cart.uvue | 1372 --------
mall/pages/mall/consumer/cart药品.uvue | 1371 --------
mall/pages/mall/consumer/category.uvue | 1218 -------
mall/pages/mall/consumer/category药品.uvue | 1131 -------
mall/pages/mall/consumer/chat.uvue | 643 ----
mall/pages/mall/consumer/checkout.uvue | 1375 --------
mall/pages/mall/consumer/coupons.uvue | 154 -
.../mall/consumer/doc/FEATURES_&_PAGES.md | 62 -
.../mall/consumer/doc/MOCK_DATA_GUIDE.md | 44 -
mall/pages/mall/consumer/doc/README.md | 62 -
.../mall/consumer/doc/SUPABASE_INTEGRATION.md | 121 -
mall/pages/mall/consumer/favorites.uvue | 309 --
mall/pages/mall/consumer/footprint.uvue | 667 ----
mall/pages/mall/consumer/index.uvue | 2259 -------------
mall/pages/mall/consumer/index医药.uvue | 2168 -------------
mall/pages/mall/consumer/logistics.uvue | 204 --
mall/pages/mall/consumer/messages.uvue | 1277 --------
mall/pages/mall/consumer/messages医药.uvue | 1277 --------
mall/pages/mall/consumer/order-detail.uvue | 668 ----
mall/pages/mall/consumer/orders.uvue | 1015 ------
mall/pages/mall/consumer/payment-success.uvue | 190 --
mall/pages/mall/consumer/payment.uvue | 868 -----
mall/pages/mall/consumer/product-detail.uvue | 1485 ---------
mall/pages/mall/consumer/profile.uvue | 1223 -------
mall/pages/mall/consumer/refund-review.uvue | 163 -
mall/pages/mall/consumer/refund.uvue | 866 -----
mall/pages/mall/consumer/review.uvue | 764 -----
mall/pages/mall/consumer/search.uvue | 1237 -------
mall/pages/mall/consumer/settings.uvue | 858 -----
mall/pages/mall/consumer/shop-detail.uvue | 488 ---
.../sql/SUPABASE_CONSUMER_INTEGRATION.md | 231 --
.../consumer/sql/insert_shop_products.sql | 114 -
.../mall/consumer/subscription/README.md | 16 -
.../subscription/my-subscriptions.uvue | 154 -
.../consumer/subscription/plan-detail.uvue | 112 -
.../mall/consumer/subscription/plan-list.uvue | 110 -
.../subscription/subscribe-checkout.uvue | 164 -
mall/pages/mall/consumer/wallet - 副本.uvue | 950 ------
mall/pages/mall/consumer/wallet.uvue | 1064 ------
mall/pages/mall/consumer/wallett.uvue | 984 ------
mall/pages/mall/delivery/about.uvue | 293 --
mall/pages/mall/delivery/delivery.md | 190 --
.../mall/delivery/doc/db-data-generation.md | 205 --
mall/pages/mall/delivery/doc/delivery.md | 170 -
mall/pages/mall/delivery/doc/earnings.md | 89 -
mall/pages/mall/delivery/doc/index.md | 63 -
mall/pages/mall/delivery/doc/more-orders.md | 118 -
mall/pages/mall/delivery/doc/order-detail.md | 51 -
mall/pages/mall/delivery/doc/order-history.md | 31 -
mall/pages/mall/delivery/doc/profile-edit.md | 25 -
mall/pages/mall/delivery/doc/profile.md | 26 -
mall/pages/mall/delivery/earnings.uvue | 542 ----
mall/pages/mall/delivery/feedback.uvue | 451 ---
mall/pages/mall/delivery/help-center.uvue | 524 ---
mall/pages/mall/delivery/index.uvue | 1221 -------
mall/pages/mall/delivery/order-detail.uvue | 937 ------
mall/pages/mall/delivery/order-history.uvue | 513 ---
mall/pages/mall/delivery/profile-edit.uvue | 439 ---
mall/pages/mall/delivery/profile.uvue | 822 -----
mall/pages/mall/delivery/ratings.uvue | 202 --
mall/pages/mall/delivery/settings.uvue | 494 ---
mall/pages/mall/delivery/task-detail.uvue | 428 ---
mall/pages/mall/delivery/tasks.uvue | 433 ---
mall/pages/mall/delivery/test.uvue | 418 ---
mall/pages/mall/delivery/vehicle-add.uvue | 320 --
mall/pages/mall/delivery/vehicle-edit.uvue | 379 ---
mall/pages/mall/delivery/vehicle.uvue | 338 --
mall/pages/mall/mall.md | 1063 ------
mall/pages/mall/merchant/index.uvue | 677 ----
mall/pages/mall/merchant/product-detail.uvue | 707 ----
mall/pages/mall/merchant/profile.uvue | 761 -----
mall/pages/mall/nfc/admin/index.uvue | 837 -----
mall/pages/mall/nfc/librarian/index.uvue | 1251 -------
mall/pages/mall/nfc/merchant/pos-cashier.uvue | 857 -----
mall/pages/mall/nfc/nfc-modules-guide.md | 142 -
mall/pages/mall/nfc/nfc.md | 1174 -------
mall/pages/mall/nfc/pages-admin.json | 183 --
mall/pages/mall/nfc/pages-librarian.json | 169 -
mall/pages/mall/nfc/pages-merchant.json | 168 -
mall/pages/mall/nfc/pages-parent.json | 154 -
mall/pages/mall/nfc/pages-security.json | 170 -
mall/pages/mall/nfc/pages-student.json | 168 -
mall/pages/mall/nfc/pages-teacher.json | 162 -
mall/pages/mall/nfc/parent/index.uvue | 635 ----
mall/pages/mall/nfc/security/index.uvue | 1100 -------
mall/pages/mall/nfc/student/index.uvue | 373 ---
mall/pages/mall/nfc/student/nfc-pay.uvue | 452 ---
mall/pages/mall/nfc/teacher/index.uvue | 912 ------
mall/pages/mall/pages.json | 515 ---
mall/pages/mall/service/index.uvue | 1001 ------
mall/pages/mall/service/profile.uvue | 997 ------
mall/pages/mall/service/ticket-detail.uvue | 919 ------
mall/pages/minimal.uvue | 29 -
mall/pages/sense/senseDataService.uts | 132 -
mall/pages/sense/types.uts | 16 -
mall/pages/test-minimal.uvue | 16 -
mall/pages/user/bind-email.uvue | 179 -
mall/pages/user/bind-phone.uvue | 180 --
mall/pages/user/boot.uvue | 177 -
mall/pages/user/center.uvue | 686 ----
mall/pages/user/change-password.uvue | 128 -
mall/pages/user/forgot-password.uvue | 495 ---
mall/pages/user/login.uvue | 656 ----
mall/pages/user/loginn.uvue | 690 ----
mall/pages/user/profile.uvue | 1070 ------
mall/pages/user/register.uvue | 538 ----
mall/pages/user/terms.uvue | 131 -
mall/pages/user/test/CONFIG_CHANGED.md | 100 -
mall/pages/user/test/DEBUG_SIGNUP.md | 167 -
mall/pages/user/test/EMAIL_CONFIG_FIX.md | 121 -
mall/pages/user/test/IMMEDIATE_FIX.md | 115 -
mall/pages/user/test/QUICK_FIX.md | 121 -
.../pages/user/test/QUICK_FIX_SIGNUP_LOGIN.md | 166 -
mall/pages/user/test/README.md | 208 --
mall/pages/user/test/USER_AUTH_SCHEMA.sql | 145 -
mall/pages/user/test/USER_AUTH_TEST_DATA.sql | 35 -
mall/pages/user/test/USER_AUTH_TRIGGER.sql | 89 -
mall/pages/user/types.uts | 31 -
mall/pages_default_temp.json | 1320 --------
mall/pages_utf8_temp.json | 1320 --------
mall/platformConfig.json | 5 -
mall/refactor-script.ps1 | 63 -
mall/services/analytics/auth.uts | 21 -
mall/services/analytics/authGuard.uts | 20 -
.../analytics/couponAnalysisService.uts | 42 -
.../analytics/customReportService.uts | 91 -
mall/services/analytics/dashboardService.uts | 145 -
mall/services/analytics/dataDetailService.uts | 58 -
mall/services/analytics/dateRange.uts | 15 -
.../analytics/deliveryAnalysisService.uts | 36 -
mall/services/analytics/errorMapper.uts | 53 -
.../analytics/insightDetailService.uts | 67 -
.../analytics/marketTrendsService.uts | 64 -
.../analytics/productInsightsService.uts | 163 -
.../analytics/reportDetailService.uts | 146 -
mall/services/analytics/rpc.uts | 42 -
.../services/analytics/salesReportService.uts | 152 -
.../analytics/userAnalysisService.uts | 121 -
mall/static/content.svg | 1 -
mall/static/customerService.svg | 1 -
mall/static/design.svg | 1 -
mall/static/finance.svg | 1 -
mall/static/homepage.svg | 1 -
mall/static/image/tab-chat-active.png | Bin 11223 -> 0 bytes
mall/static/image/tab-chat.png | Bin 7357 -> 0 bytes
mall/static/image/tab-dashboard-active.png | Bin 86298 -> 0 bytes
mall/static/image/tab-dashboard.png | Bin 94349 -> 0 bytes
mall/static/image/tab-device-active.png | Bin 6337 -> 0 bytes
mall/static/image/tab-device.png | Bin 11602 -> 0 bytes
mall/static/image/tab-location-active.png | Bin 12721 -> 0 bytes
mall/static/image/tab-location.png | Bin 11681 -> 0 bytes
mall/static/image/tab-training-active.png | Bin 1600344 -> 0 bytes
mall/static/image/tab-training.png | Bin 144857 -> 0 bytes
mall/static/image/tab-user-active.png | Bin 12405 -> 0 bytes
mall/static/image/tab-user.png | Bin 11684 -> 0 bytes
mall/static/images/default-banner.png | 0
mall/static/images/default-product.png | 0
mall/static/logo.png | Bin 164292 -> 0 bytes
mall/static/maintain.svg | 1 -
mall/static/marketing.svg | 1 -
mall/static/order.svg | 1 -
mall/static/product.svg | 1 -
mall/static/setting.svg | 1 -
mall/static/user.svg | 1 -
mall/static/user/COPY_IMAGES.md | 60 -
mall/static/user/README.md | 20 -
mall/tsconfig.json | 51 -
mall/types/analytics.uts | 3 -
mall/types/analytics/common.uts | 5 -
mall/types/analytics/coupon.uts | 11 -
mall/types/analytics/custom-report.uts | 29 -
mall/types/analytics/dashboard.uts | 7 -
mall/types/analytics/data-detail.uts | 4 -
mall/types/analytics/delivery.uts | 25 -
mall/types/analytics/insight.uts | 19 -
mall/types/analytics/market.uts | 9 -
mall/types/analytics/product.uts | 14 -
mall/types/analytics/profile.uts | 38 -
mall/types/analytics/report-detail.uts | 46 -
mall/types/analytics/sales.uts | 22 -
mall/types/analytics/user.uts | 25 -
mall/types/charts.uts | 15 -
mall/types/mall-types - 副本.uts | 365 ---
mall/types/mall-types.uts | 470 ---
mall/types/orders.uts | 8 -
mall/uni.scss | 39 -
mall/uni_modules/ak-req/ak-req.uts | 437 ---
mall/uni_modules/ak-req/index.uts | 2 -
mall/uni_modules/ak-req/interface.uts | 48 -
mall/uni_modules/ak-req/package.json | 9 -
mall/uni_modules/charts/EChartsView.vue | 425 ---
mall/uni_modules/i18n/README.md | 67 -
mall/uni_modules/i18n/index.uts | 39 -
mall/uni_modules/i18n/package.json | 9 -
mall/uni_modules/lime-clipboard/changelog.md | 6 -
.../lime-clipboard/lime-clipboard.uvue | 32 -
mall/uni_modules/lime-clipboard/package.json | 86 -
mall/uni_modules/lime-clipboard/readme.md | 30 -
.../utssdk/app-android/AndroidManifest.xml | 6 -
.../utssdk/app-android/config.json | 3 -
.../utssdk/app-android/index.uts | 80 -
.../lime-clipboard/utssdk/app-ios/config.json | 3 -
.../lime-clipboard/utssdk/app-ios/index.uts | 33 -
.../lime-clipboard/utssdk/index.uts | 19 -
.../lime-clipboard/utssdk/interface.uts | 66 -
.../lime-clipboard/utssdk/unierror.uts | 39 -
mall/uni_modules/rag-req/interface.uts | 55 -
mall/uni_modules/rag-req/rag-req.uts | 218 --
.../.app-android/tsc/app-android/.tsbuildInfo | 1 -
mall/utils/authRedirect.uts | 62 -
mall/utils/i18nfun.uts | 14 -
mall/utils/mock-category-data.uts | 271 --
mall/utils/sapi.uts | 104 -
mall/utils/store.uts | 457 ---
mall/utils/supabaseService.uts | 2866 -----------------
mall/utils/utils.uts | 201 --
package-lock.json | 1363 +++++++-
pages.json | 46 +-
pages/mall/admin/service/autoReply.uvue | 2 +-
.../admin/subscription/plan-management.uvue | 4 +-
.../subscription/user-subscriptions.uvue | 4 +-
pages/mall/analytics/coupon-analysis.uvue | 2 +-
pages/mall/analytics/index.uvue | 2 +-
pages/mall/analytics/market-trends.uvue | 2 +-
pages/mall/analytics/product-insights.uvue | 2 +-
pages/mall/analytics/profile.uvue | 2 -
pages/mall/analytics/sales-report.uvue | 2 +-
pages/mall/analytics/user-analysis.uvue | 2 +-
.../mall/consumer/bank-cards/add.uvue | 0
.../mall/consumer/bank-cards/index.uvue | 0
pages/mall/consumer/cart.uvue | 18 +-
pages/mall/consumer/category.uvue | 43 +-
pages/mall/consumer/chat.uvue | 191 +-
.../mall/consumer/chat_new.uvue | 0
pages/mall/consumer/checkout.uvue | 1131 +------
pages/mall/consumer/coupons.uvue | 29 +-
.../doc/CHAT_SHOPPING_SUPABASE_ARCH.md | 0
pages/mall/consumer/doc/CONSUMER_DB_DOC.md | 192 ++
pages/mall/consumer/favorites.uvue | 24 +-
pages/mall/consumer/footprint.uvue | 113 +-
pages/mall/consumer/index.uvue | 260 +-
pages/mall/consumer/messages.uvue | 114 +-
pages/mall/consumer/orders.uvue | 22 +-
.../mall/consumer/points/index.uvue | 0
pages/mall/consumer/product-detail.uvue | 398 ++-
pages/mall/consumer/profile.uvue | 182 +-
.../mall/consumer/red-packets/index.uvue | 0
pages/mall/consumer/search.uvue | 196 +-
pages/mall/consumer/shop-detail.uvue | 448 ++-
.../consumer/subscription/followed-shops.uvue | 214 ++
pages/mall/consumer/wallet.uvue | 210 +-
.../mall/consumer/withdraw.uvue | 0
pages/user/boot.uvue | 54 +-
pages/user/login.uvue | 136 +-
sql/create_shop_follows.sql | 29 +
sql/fix_chat_rls.sql | 27 +
sql/fix_shop_product_counts.sql | 52 +
sql/fix_shop_visibility.sql | 34 +
sql/seed_test2_products.sql | 128 +
uni_modules/ak-req/ak-req.uts | 8 +-
uni_modules/charts/EChartsView.vue | 439 +--
.../.app-android/tsc/app-android/.tsbuildInfo | 2 +-
utils/supabaseService.uts | 1483 +++++++--
1454 files changed, 5425 insertions(+), 210555 deletions(-)
rename {mall/.git_disabled => .git_disabled}/COMMIT_EDITMSG (100%)
rename {mall/.git_disabled => .git_disabled}/FETCH_HEAD (100%)
rename {mall/.git_disabled => .git_disabled}/HEAD (100%)
rename {mall/.git_disabled => .git_disabled}/ORIG_HEAD (100%)
rename {mall/.git_disabled => .git_disabled}/config (100%)
rename {mall/.git_disabled => .git_disabled}/description (100%)
rename {mall/.git_disabled => .git_disabled}/hooks/applypatch-msg.sample (100%)
rename {mall/.git_disabled => .git_disabled}/hooks/commit-msg.sample (100%)
rename {mall/.git_disabled => .git_disabled}/hooks/fsmonitor-watchman.sample (100%)
rename {mall/.git_disabled => .git_disabled}/hooks/post-update.sample (100%)
rename {mall/.git_disabled => .git_disabled}/hooks/pre-applypatch.sample (100%)
rename {mall/.git_disabled => .git_disabled}/hooks/pre-commit.sample (100%)
rename {mall/.git_disabled => .git_disabled}/hooks/pre-merge-commit.sample (100%)
rename {mall/.git_disabled => .git_disabled}/hooks/pre-push.sample (100%)
rename {mall/.git_disabled => .git_disabled}/hooks/pre-rebase.sample (100%)
rename {mall/.git_disabled => .git_disabled}/hooks/pre-receive.sample (100%)
rename {mall/.git_disabled => .git_disabled}/hooks/prepare-commit-msg.sample (100%)
rename {mall/.git_disabled => .git_disabled}/hooks/push-to-checkout.sample (100%)
rename {mall/.git_disabled => .git_disabled}/hooks/sendemail-validate.sample (100%)
rename {mall/.git_disabled => .git_disabled}/hooks/update.sample (100%)
rename {mall/.git_disabled => .git_disabled}/index (100%)
rename {mall/.git_disabled => .git_disabled}/info/exclude (100%)
rename {mall/.git_disabled => .git_disabled}/logs/HEAD (100%)
rename {mall/.git_disabled => .git_disabled}/logs/refs/heads/cyh666666/consumer (100%)
rename {mall/.git_disabled => .git_disabled}/logs/refs/heads/main (100%)
rename {mall/.git_disabled => .git_disabled}/logs/refs/remotes/origin/HEAD (100%)
rename {mall/.git_disabled => .git_disabled}/logs/refs/remotes/origin/comclib-analytics (100%)
rename {mall/.git_disabled => .git_disabled}/logs/refs/remotes/origin/cyh666666/consumer (100%)
rename {mall/.git_disabled => .git_disabled}/logs/refs/remotes/origin/huangzhenbao-admin (100%)
rename {mall/.git_disabled => .git_disabled}/logs/refs/remotes/origin/main (100%)
rename {mall/.git_disabled => .git_disabled}/logs/refs/remotes/origin/ysj-delivery (100%)
rename {mall/.git_disabled => .git_disabled}/objects/00/8b5c090b3c9236fa59321f68f2ffa2469a747e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/01/694319e412029ecccf3ab86f71808167b49b70 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/03/2b689e3077670c856cfdcc73fa698bfc7af990 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/03/69a8c5c0d731a7a649e4d3a2bf9639a3a5b727 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/03/6b8a113d4d3b907a1329dcd0db811235fef113 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/04/ad80bc32d65dd9c0abb88c79ca268a8538a2a9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/04/fc7bc90aefa3c43c95e8ad9e38e2a354c5bc39 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/05/da5deeacf59c3e86b862d6b5f4162654f31088 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/06/764b6a617f56c94a8be328f3e4c1edf635cfb9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/06/e381d6f01912f7a34ca8ae6673db2b0f909fa6 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/07/10effd5f2d8f8b8ce35e1a915ee3eb268a541f (100%)
rename {mall/.git_disabled => .git_disabled}/objects/07/f2452494909d431aa9bb5ef2a12dff9ea410f9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/09/c33be3944cd0928c4d4300b5091c480e1e6ce4 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/0a/0686686da2d07a9193029565c212429bf4d4d9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/0a/71faa46489ab0b2cddb585ef9e2d98ed2e8f7a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/0a/8ee8803328745670d6192f19f6e150f4df5686 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/0a/b769f1d2f8bd8a6995c61e83311835940803ed (100%)
rename {mall/.git_disabled => .git_disabled}/objects/0b/f13ee5f510c7025881c9f211cfb70eaa45a84a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/0c/687186d417a4e3631805004b5133cab99c8126 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/0c/725c32404e9d25006c55809b6bcc0406e6485b (100%)
rename {mall/.git_disabled => .git_disabled}/objects/0c/956c6b50c1b8178b884bd9be07d423b813cc6a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/0c/aafefe247b87090638a4ab1b4a3882a6bf24b6 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/0c/b8ccf6ad4a4cfefc40afd2a268d978bd9002e4 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/0d/1bf091bf60a9a62d444786fcce1e23fc854d25 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/0d/5f1be5fdcd3673ee1a40c081403af1baf96f84 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/0e/d62a82583382449a860a0d5bd7517a93c88dc9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/0f/9cc197b0b07feb5908da3cee31b14636f51c9d (100%)
rename {mall/.git_disabled => .git_disabled}/objects/0f/d1cd5c57fa435a479620dd5131959324ef33a5 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/10/49c5b251d938bfbb0e29b5346aa828ea492481 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/12/1595995e61cea28e24041dc7c10679a3eaeb7f (100%)
rename {mall/.git_disabled => .git_disabled}/objects/12/172425d59adec075f823584af9c70b03dd8c70 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/12/41580f5a05d6166995a04e78f13fd94feaf728 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/13/4f83615db32b2f2faed54678e24a7ac4ed8733 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/13/fe09a27e5ae9dfb3acba8c0b6c863ef1d1b27c (100%)
rename {mall/.git_disabled => .git_disabled}/objects/14/7f2b3ba0f037fc23ff7e554b9f2dc54d772ecc (100%)
rename {mall/.git_disabled => .git_disabled}/objects/14/7fbe1a877abf30870ef2f3697d2353bd3a960c (100%)
rename {mall/.git_disabled => .git_disabled}/objects/14/9e6520aa7c7148cf986ddd101f5834c628631e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/15/67c72bebe9966a084da09bb8da3dcfa795faeb (100%)
rename {mall/.git_disabled => .git_disabled}/objects/15/92bcab98e8678ef9a52ecc284be9ddaa957077 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/16/103cffeb25b133671b55931ee327c1a6065443 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/16/c2fafc914ccdd36c9d0f1ccfe861f7e3a49bd7 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/17/df18fed1f5bb4c133c825f81588fef96dd1245 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/17/e2fe7b101b8f0fdb4bfe1f07d927b6696859c6 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/18/0ef42521d7bf5cdadf85393eca662932691c07 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/18/4941cd3a4e9acba709d46b9aa9bd7960848536 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/18/83070ece89251104029e8126204c3dc18fd472 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/18/dab945708274aabc176efcbd01991ca8f21abd (100%)
rename {mall/.git_disabled => .git_disabled}/objects/18/ee45d070678e985d9da10180e8876627b5e51d (100%)
rename {mall/.git_disabled => .git_disabled}/objects/19/ae75f354c800ec08415224e8e139c373d5f2c3 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/19/bf509dd78f165673c49c5d3ddda5561550a56e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/19/de501a908a11519ec148e74ef268811c717040 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/1b/3aa3821b0fc5aa94f104ebadea06664be7d73a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/1b/6aeefab0c91d2d40f8302ae4b4bdf6415d6d7c (100%)
rename {mall/.git_disabled => .git_disabled}/objects/1b/787617684d74767d6260da32d9567815999202 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/1b/7b95f34f597de771ca1ee1a9d66ddfd4389dc3 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/1b/83b5e0b358b18c0d830d2b597aaab40d040297 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/1b/dcf0c258e3b224e6d505aac4c3eb426d06bbbf (100%)
rename {mall/.git_disabled => .git_disabled}/objects/1b/eb9a3fa2ed892e2b558611e02e57296c7d87a6 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/1b/ff67d42ff6c38a2800aa87bfc503cd7134a470 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/1c/8b5a11f024d5b079241c2689c4bf1c8c9aa407 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/1c/b6e8881f98fe015c076f5469247fb4482738df (100%)
rename {mall/.git_disabled => .git_disabled}/objects/1e/163a2ce00a24d44df5a10d30d596309f97b2ef (100%)
rename {mall/.git_disabled => .git_disabled}/objects/1e/48bf62554917c4b4a449e6b9892f0a8e516121 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/1e/56968b9e9f2101628e6e5553974a412adde23b (100%)
rename {mall/.git_disabled => .git_disabled}/objects/1e/8000a5fdc86e82f5dcd3a07e8d167adb5b88be (100%)
rename {mall/.git_disabled => .git_disabled}/objects/1f/39c33a9265c390acceba97e36b561406e40474 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/1f/78e4d427eec7184f10ab308161d210155786db (100%)
rename {mall/.git_disabled => .git_disabled}/objects/1f/dcb2c0e56e9d2c5d04860dcf524024a5a5f71c (100%)
rename {mall/.git_disabled => .git_disabled}/objects/20/22a587f691d68b43ee561754068e7a22b1eb65 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/20/8cface25b7b54ba263b613ef98a30e18aeb7f5 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/20/d50671e0efd5f6b30c167573daaa490cb2d9df (100%)
rename {mall/.git_disabled => .git_disabled}/objects/21/33fc673b45dab46bfe6b6efc5a699ebabe2035 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/21/580e5014c27303a68e020f7f01f2affe9e33a9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/22/6d8b92c711ab33f201340b8631c0712d52711e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/22/e586d1e7f20be7f5f9d594d9bce37f1985c839 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/23/300e7c1f188b220316718291216d44c6a227e0 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/23/4c8c9b7c53316498712767ec4f8a6e09d5edae (100%)
rename {mall/.git_disabled => .git_disabled}/objects/23/8d5a9ebe4035a679b0980182c9620be18002ac (100%)
rename {mall/.git_disabled => .git_disabled}/objects/24/52ff13e613ae15f1139988ff429504631c7094 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/24/e78cbf7072bd8878711834ec2e737279c5be56 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/24/fe0f9c7cfe870424807220dd13713431873c84 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/25/736772286ae52ecdedc84fdad7696a312e9cf8 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/25/7f52f5454af5123fedc7fae385cb5b4a82f89b (100%)
rename {mall/.git_disabled => .git_disabled}/objects/25/ba378f6366b29d2d906dad0ad254464e0ddfd6 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/25/d48391084c4a847f05d5892a413cea1f5c3948 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/26/29410e6b05ff7f61c2b3274a1e4bc2d70c14c1 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/26/8e76c79f234b923a1830f675ec9328cad00422 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/26/9cbc4b1f06a0580c6b0c32d46f27fc51ac3d32 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/27/d5f5841728f9e41147e796c578128749e56ed1 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/27/e3757e0da5ca90b005f469a9a8645555bd880f (100%)
rename {mall/.git_disabled => .git_disabled}/objects/28/299d2730a56d7cb240f4ad3c4309daf6fc5902 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/28/5660df34948c0f841852b752ee4cd08d5d93d9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/28/b252f1254464cc50677485fef5a8b2c5f94b3a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/29/0e5606885e2f06de05d769f4b8c098d7b4148b (100%)
rename {mall/.git_disabled => .git_disabled}/objects/29/8bc55229c06bd010c6c16921c272fc9e1c68f9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/2a/92a152b849cf9d885504c74dc3d76c2d2685eb (100%)
rename {mall/.git_disabled => .git_disabled}/objects/2b/0ee0c8b6a507fefa5b29f5c4e06c033f34ab2a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/2c/1c72e65fb19248f19b996259be52f3b2fefd56 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/2c/1e55edc460bdf35a9a143ac13c9497c7c889c1 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/2c/4a4a97e7c3a8b6dd62e1d2dda669242dd3d5db (100%)
rename {mall/.git_disabled => .git_disabled}/objects/2c/be8d1a3684315092236e303bb42faed05592c5 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/2c/c8b4fc926115a271ee3474554793f1403150cf (100%)
rename {mall/.git_disabled => .git_disabled}/objects/2d/3a88b2053d98e981ac813c002d01e063cd94d8 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/2d/8ea88b0a4c8ba1c52207099e056a8cffdd48c1 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/2e/81146c1b592a07c9bc4d13a58d315276270ec3 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/2e/decb814e2097a27a7f8b496a045ecdd415f12c (100%)
rename {mall/.git_disabled => .git_disabled}/objects/2f/0ce74e8ba0b322284b6e3687795cbdf0b888ca (100%)
rename {mall/.git_disabled => .git_disabled}/objects/2f/144d96a7c5181be502c8da25816ee6b5fbdc53 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/2f/a4541115539240980a1a9021d1fc2bd09f8b0b (100%)
rename {mall/.git_disabled => .git_disabled}/objects/30/ac59404abb6fc80352762c4b16bb502b0f7455 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/30/c70f874b629eaeabb195cf41c483500c0cdf24 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/31/b975111e856d266275ce3fade69d4c2d8f5033 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/31/cca3dfb52946d939e15ad38d1a89fa31c3e4ab (100%)
rename {mall/.git_disabled => .git_disabled}/objects/32/4ce61b8010d6b52aa895a06ad9642314247aa0 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/32/69c13ebc8ce97a97e352a359a9d8c999dc3e6f (100%)
rename {mall/.git_disabled => .git_disabled}/objects/33/081996e13f876d85089c19be852732faa01115 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/33/4f8ae3e0d4b2016c1789cbe42a8edc8bc05f85 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/33/79830ad2165b9342fbdaeb87e625a4418355ab (100%)
rename {mall/.git_disabled => .git_disabled}/objects/34/13f86c0eb29e52d7190df4bf06ef4cce9356cd (100%)
rename {mall/.git_disabled => .git_disabled}/objects/35/ce4cff6e2ba290a45d8ba776ecf484f01b46f4 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/35/f5ddc2e91df10b961dd836d0827fe9cc942fef (100%)
rename {mall/.git_disabled => .git_disabled}/objects/36/435e031d05ec3f07c895338e54b55b81a85673 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/36/c899117a6cd78ea00c9231e860e4a8eb63e2cc (100%)
rename {mall/.git_disabled => .git_disabled}/objects/37/432fa9442f666b4c992fdb2857987e62e31360 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/38/b0e73b9c5fe57eb1257900c06db180342af2e9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/38/cee1f63fe30088d4d98d569e01bbc6d30c7d19 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/39/1ca1aed712bf7de739f5618e0aa9311d8cb8a7 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/39/4b450dd1b426150d4008b519aa7647a3db5c7e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/39/bfc14d807d39e6943ebb56fcff552f0f076291 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/39/c6929b4ce524f268bdf6c9a35ed1142e15876a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/3a/275cbecdd4ecc3b6c8a6c224e75a506854385f (100%)
rename {mall/.git_disabled => .git_disabled}/objects/3a/4cd241b1bb00943722a8ed2cb1995ea95235e6 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/3b/7e062a4fb4224e3e94fe3b6c158b103519b6f6 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/3b/8584d35625d986cd1eec83db87cdf09438ef74 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/3c/7445168e74e221e30b4ec58e71d3490fa45809 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/3d/6563399ccbd637d6b73d8f92c358506d457c0e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/3d/9f7f895677fb97d40b26a2501efaa73b33ae30 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/3d/fb25d88e89853ddd6fb6f0e1658d4aa65c5b9e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/3e/32cec58337663bd5dc3c59fb47c51bf4e31726 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/3e/57100d337529ec2d772d1af3e0f2e9def0262f (100%)
rename {mall/.git_disabled => .git_disabled}/objects/3e/c108f198b75401890046dc3412dc9ba5b0d887 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/3e/e235277f1576100bc9d580b1632a204e9aa4fe (100%)
rename {mall/.git_disabled => .git_disabled}/objects/3f/107b78add37b54a0d4f31ead7a30f8439476ce (100%)
rename {mall/.git_disabled => .git_disabled}/objects/3f/a08c8af9d22a7ae485af7f5c68a42ecc834272 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/3f/dd3ad545857ce2724d53a82b67a5e54d003661 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/40/4eb7e1fa07d4c75262899a9f94ff5bf6713ff5 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/40/938b6b337f4d391cf1c44a3f6509c2d7d6f082 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/41/dc0f0d913fbb241ad355a67de7f714ac26c1ca (100%)
rename {mall/.git_disabled => .git_disabled}/objects/42/35f6eadd3a25378daf102630552013d046f071 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/44/07421db98a92de0a0dba3480688fa052c5f813 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/46/2242984cfbf9b875766147984ceb484e483b10 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/46/33b4b6ca3fadb3d57d532851a23a15470f1873 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/46/3ab6be92339b7835879f6ea54ac16e47bdce82 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/46/5042e1c9c6003972c9e5d5fb772859c2d650c6 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/47/f8a0ca976845eafa82680adca9364c66a3a124 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/48/2d68a5484b39bc59dbc2915b8648aacae04b90 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/48/a43200440fe5676c07838796c6c62a757b8cd2 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/49/ccff181679e3f14c904911b4d182bc0bbdff87 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/4a/b722a118d41f1999c2203d12742ace922b176d (100%)
rename {mall/.git_disabled => .git_disabled}/objects/4b/4eb4ca04c5bdfebfc6aa8c13754b2f0f640481 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/4b/9a6bfcd9a5ee5406bf85bf5afdd177821a1de9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/4b/d0b1185c911d55a39523cc45e601f223f42e94 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/4b/d7f122ed6729e5de708c17d963f7e22c5fe4ab (100%)
rename {mall/.git_disabled => .git_disabled}/objects/4b/db1c22f4589277d27b97b3abb53c1c3e25f256 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/4c/81081239bfcc99b7d36362101d19c4d8de855a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/4d/91437418f11cfc516a76aa7a34c402a465b4f8 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/4d/a64a2aabaf5a4eaa27f013e1771f241998241c (100%)
rename {mall/.git_disabled => .git_disabled}/objects/4d/ec90cbc07b379c02be611a55844d7cb6e74204 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/4e/072b393202fd716303d9741d437fefda357032 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/4e/099668d344161856d5536fe4a8c9b1ce960df0 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/4e/4efb66049ffdd484da1e15b402bbcf53d3de15 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/4e/d719cd38786fb5f9ab3b4c54bef2b9b16323b9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/4f/17fe44fcacb6f8f6d8d40dd8e7fc26476d6f70 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/4f/bef3c18c64cfe91190ff31ccd6a8deffb957c3 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/50/0dd3ed5e0fb22ac2a62d486989d0c1cbb79e7c (100%)
rename {mall/.git_disabled => .git_disabled}/objects/50/467c2ae235740ae5b835cf7885d01bf70d21b6 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/51/0f802d4bf2ace4517b350b8f03381ea944bf5e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/51/12d4498367130ecc5688b454aaa09ca75f9482 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/51/175aa0e1d7abc8931a4d59903c00c563dcf3f5 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/51/ab6f34a2af36b5cde2ee0a684d6aea52a71ff9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/52/1c452895cc2c5c0c9f1c12e8b2cdd9314bc1e0 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/52/4d76265f6b817647d395d85d509084dd5aa5d8 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/53/6a90a24880298c0e4ed5e5ea8e1b5d2e60dd73 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/53/c906358a9af7f098f9459886d3a991e2fd070d (100%)
rename {mall/.git_disabled => .git_disabled}/objects/54/8f595bbca62114fc5bb85d7d14d3c6f080d83e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/54/d86347606a3013d9a188bd77d0cce886ea4b6f (100%)
rename {mall/.git_disabled => .git_disabled}/objects/54/fe54bd39bc0a2acd700691ed516cc9e6e53e71 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/55/9492ddcec85fe69bd3cb670a0d999c5d0bad27 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/56/a3ff4959c5003632300a77b8dc7348ddd9fe3c (100%)
rename {mall/.git_disabled => .git_disabled}/objects/57/0c63d9ac278f962437674d0fd909aef933cbac (100%)
rename {mall/.git_disabled => .git_disabled}/objects/57/55d728fa672faa36c79f1fad96b6547d279747 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/57/f3d413fcfadced5f3acdb8db7be2308d75108b (100%)
rename {mall/.git_disabled => .git_disabled}/objects/58/09cc954a63e3a0f5812df5282b5441e0f9249f (100%)
rename {mall/.git_disabled => .git_disabled}/objects/59/6795929f5f939a614f38b1baf9ce4b5bf60e59 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/59/b14f97b328cc856d5c0db98a9eab670e7f478a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/5a/3b1e4d220d219e2de574c2ee5f29e7bf3f4ebf (100%)
rename {mall/.git_disabled => .git_disabled}/objects/5a/b7342988f40bac2093deee41cf6b385741b665 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/5a/cab0ebe17749b444faf345ff71f12ae175b59b (100%)
rename {mall/.git_disabled => .git_disabled}/objects/5b/53a47aa875985e75f384064958733ee2bb197a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/5b/6245f64ee548982568a0f292c0c7bc38f46037 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/5b/7b1eb6083ae15d9445d9ea5e2caaaf8b09ac92 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/5c/02cd563f92a1ffdca9b71566e2bd43e85a5b13 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/5c/113dc318007c89596dcdf652a15bd07f54bdcb (100%)
rename {mall/.git_disabled => .git_disabled}/objects/5c/72f5223da44bd5c47cb7828fb211f294f2120b (100%)
rename {mall/.git_disabled => .git_disabled}/objects/5c/f252a2d31075feb36484d24e58fd4269d712f8 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/5e/053b497c1a56047817dcff8ad6a35ca071e3b0 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/5e/5c7d69ff81ce6d8558f3633e8b072dc8d04083 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/5e/7fae15d66f486f1aa2a9528dad44152d64f59f (100%)
rename {mall/.git_disabled => .git_disabled}/objects/5f/221961b2557b4779f0fab49ba90a03745f5ebc (100%)
rename {mall/.git_disabled => .git_disabled}/objects/5f/4b31160507f8be954fe55e596f9ea8959a849f (100%)
rename {mall/.git_disabled => .git_disabled}/objects/5f/7dd2387281a8c1203d0741805d7f78d13899ad (100%)
rename {mall/.git_disabled => .git_disabled}/objects/5f/d896a2e8e1a97a9f9a3887f10abda025ca72c0 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/5f/f409d6a268c58de83dfacf23838346fa007e40 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/60/054c43c026a9344fa1ee448cd24063356de41b (100%)
rename {mall/.git_disabled => .git_disabled}/objects/60/3f4f1fff51879ce2cb906a71280df92e5754da (100%)
rename {mall/.git_disabled => .git_disabled}/objects/60/5e19453853ef8243b54bbef0b19c6b87d790d4 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/62/61795fcaf6b35cbb4e92b8969f35ae60b508c9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/63/19b78bbb0266d9a50198ff043e82703c79a52a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/63/b4a9ad4c99374b9942c45a0d61bd8cd9b98c51 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/64/8e7cc00b47deccbd2bde65c56a521dc3660377 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/64/918dcb2c9ae7032a0739891e2c02e49346cf8a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/64/f49a36e2a401b586d5888f03dbb6ef4e5e58df (100%)
rename {mall/.git_disabled => .git_disabled}/objects/65/6210209436fe01585be84e9b05f984ee1958a9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/65/6d76dd651392991879212acbc8fd1885d143be (100%)
rename {mall/.git_disabled => .git_disabled}/objects/65/c5b089e2075ce80490dfe6b95681c5ee2fa916 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/66/aa909193b008842948589adf6f302840aa6efc (100%)
rename {mall/.git_disabled => .git_disabled}/objects/67/c6133de7898674c9531ba23c820122f2aaa0ca (100%)
rename {mall/.git_disabled => .git_disabled}/objects/67/ef2d6d6da3c4070d286059b9add37be5aaac97 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/69/34603289b5a2c3369b03d428b6bc28e348c61e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/69/3a201a058a51b23180e19de68cbd5a3dd54c58 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/69/b5015c815bebd7813a4856b7246569458a2416 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/6a/4104b80b2cf0c91383c9702fb381e29bfc1042 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/6a/54f7eef61252a21108c1d2e3e8128ccb949278 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/6a/96b7f56b19f9e88b866372f1142087d9b8a4db (100%)
rename {mall/.git_disabled => .git_disabled}/objects/6a/c2a9c762cc4781e3f20e3e4b1a12e220d743d0 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/6b/5318e6a449374c05e9fdbf297d036fcdcdcc86 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/6b/683279322bfa8f3fb914ba3991d06e0d81be45 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/6b/c9be2a31f3a24e1f864c868780bb409c64e8d4 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/6c/95008ccd1dd7bb737578b08aab3b6e2aa52172 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/6c/ac3ba57621be2232b40b800de5bcbb37c80f01 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/6c/bb55c7bafff1accf0273f903d87ea28cb1c5df (100%)
rename {mall/.git_disabled => .git_disabled}/objects/6d/1e1a82518f16b49369a492ac964712a7dc3769 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/6d/9d4ec341bc4609940eb251a7b5010c5ec4b34e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/6d/cb725787d340db48780cc4f0659f09aeec17e7 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/6e/9f5b11699788559819d1c1682c46560cf6aa4e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/6e/a10712ca96453ab337e1e8e0ea417d3d38a74a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/6f/1065ce9604fd91accc0dc29c2e1daa007e0d3c (100%)
rename {mall/.git_disabled => .git_disabled}/objects/6f/62924f1e1d130c2c8da85be00931f173817b93 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/6f/638a238362b20064bda9d86d8876d1a7c3d76b (100%)
rename {mall/.git_disabled => .git_disabled}/objects/6f/f5625b558461a2789cb48e081cb43467bba145 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/70/746bcefc6597cb15458c3737012b90eaf931b4 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/70/9e4fd028183514fe16622b0195c5c966548b67 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/71/4bb98d46ceb983f78c238e56bf39f179ffcd4b (100%)
rename {mall/.git_disabled => .git_disabled}/objects/71/5e894fe682243e752ed67ddcd3608c2a2bc058 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/72/0ba6818b97e60a491ea02fe71a71e79ee6c697 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/72/c1505dd7fec1e1e5ae6f220209499b0c5df30e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/73/18fbf1f605ca6b67232d3346b81a95d67dc008 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/73/471b7810b08345cc8d1a7525be6c9467bc8f3e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/73/498128dde533e8984c8bc2ebcca43253e46fb6 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/73/feed5a38516b3f0361437821d3ce0ad9748e1e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/75/3ffcb9c3fbeed20cdef4117ed80d32ed37b6fc (100%)
rename {mall/.git_disabled => .git_disabled}/objects/75/fad97d5dbee5a32ac586cbfee2d8e1d73dd1f2 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/76/5ececbfc6feced66bbd9cf25ee079dee6be576 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/76/eb96ec0c1c7fb3618e30068060463074f087fb (100%)
rename {mall/.git_disabled => .git_disabled}/objects/77/2bc57e30e479d2b08ed51bc99a28fc361896ad (100%)
rename {mall/.git_disabled => .git_disabled}/objects/77/bb4026e862ff0f7cf8d0992a6dee538c948d0a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/77/c4757ac3ffde50f67703a7e6ecfc555372b2a6 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/78/a44cc8caf24ff9c8ac488781edd6132561e1f8 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/78/b849e30d43974d8ccf126680001bc7f0551fd1 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/79/95f6f9c21a49bc45fa9f0621fb446e425ef17d (100%)
rename {mall/.git_disabled => .git_disabled}/objects/7b/2c4d5633b321df02c1d0f57da7e0f5348b5f78 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/7b/5377944d3ac36cffbef1d045c6c8ab7775cfdd (100%)
rename {mall/.git_disabled => .git_disabled}/objects/7b/7b63c22f42c0669dde59b15f298bf7ff09e6f6 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/7b/847032f10b09117ce92ccdec99ce36cb7f470d (100%)
rename {mall/.git_disabled => .git_disabled}/objects/7b/9094c5bc90e051aab7e764b199279aa3902da6 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/7b/dd7157abc9507ed8222d7a35c10c3b76dc8556 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/7c/11504fac038b2b77cf91e17d7d5bdf62804f91 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/7d/275fa1bba484dbf2d53cae5df74b38dd8c4652 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/7d/4d09094bc4c86a66ee02dba2acd91f49f9336c (100%)
rename {mall/.git_disabled => .git_disabled}/objects/7d/4f8c11ddd4e5120d8f1e745601462c097a6bee (100%)
rename {mall/.git_disabled => .git_disabled}/objects/7d/6e20f8c4946bafc9227cdb37202c03414a3270 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/7d/8dbe2197609d211bb6b8abedb1fb56d0eb1a41 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/7d/ae38f8bdb94085dfa8bf29620a28445f3233f1 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/7d/dce6fa57afa4b7748224367b142e08d255f5b1 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/7e/c5599574ebede5071d844e3a5b9d0ed87bea93 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/7f/4e8d976a907ca99dbe726121d6c8198ff6a522 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/80/64b2bc935e020bdcf83763977937bbb1ce6eb0 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/80/fa6aa344d13a67bbb82715bf6ca5f861862318 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/81/3e91fe96e20f837dc93a05b72ef831d0d62893 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/81/6d6901a8d814d1437112a0063792b350b4f1e4 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/81/9cf5486f5dfd9ebfe852accdf6e53493b209f5 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/82/00c3a94049d5c4c6b005c133af9e43ff3e8442 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/82/a6e32242823de823426642cfc525308c0e4872 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/82/d46a6bc8796fc88122351de921293b6cf86b90 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/83/10e3df76db1eb1b240255d9b5043138fbbf844 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/83/113b958b5748559e401af5eb07df301b51cb4d (100%)
rename {mall/.git_disabled => .git_disabled}/objects/83/dcc87376c48bec61c8fbe330abd64fffec0c02 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/84/0e6fcc853120745657e8f3823196136ea58a77 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/84/18059a1748fd51b8764119bffd0bd22b437b86 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/84/4563ad0bfecae89ee1857a77c28b2f31cb2466 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/85/45a3148bac1e161d5fa5825a012effe6924619 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/85/4af7d045127c7dd3669b78a38d6bab18a284e8 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/87/9ad4d767356dd6fa26d3e0bd0c1032f4473d73 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/88/e1e655d3e88558e24e96647a4ea96fb2b307af (100%)
rename {mall/.git_disabled => .git_disabled}/objects/89/6f669a2d75c55697c17927495d370b15253727 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/89/7375f218341523c676e20119170c70449efe1b (100%)
rename {mall/.git_disabled => .git_disabled}/objects/89/80aaba9e038dbfc4d94e26dcda0b926774a0c1 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/89/bea656620e9505b520142312cb7faf366feaff (100%)
rename {mall/.git_disabled => .git_disabled}/objects/89/e45115cec0917297a59f1f3543a075272b51fd (100%)
rename {mall/.git_disabled => .git_disabled}/objects/8a/535e3f387f58d736ca44a544e45ac1fe784cc8 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/8a/cf24d88d47214bada9f81bb80e26f203e95f55 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/8a/e452a8a8350fcbfc5a09d44b392b1054338d41 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/8b/62d14585e7fc204db28ed36b5c1ae9570672cd (100%)
rename {mall/.git_disabled => .git_disabled}/objects/8b/638472b45dac3a965ed44f4160a4710e3d7624 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/8b/b3efd50c4554b9aedb990f0cc2f58904ce25f9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/8c/5024a943b9999336ac3b491b5384c43bb54d30 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/8c/6c10a63e8d3b48f86288f982ab9d72c237e7f9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/8c/e98ec397fe0946a262e7003a5a9535b281ffbe (100%)
rename {mall/.git_disabled => .git_disabled}/objects/8c/f90f4c7db8042f785d751a787de126cae30c2e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/8d/9528886773548cfd4b3562da3e7ee7f85aaca2 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/8d/970c70a191cfa8ef6ac8051d238b2142c47286 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/8e/8d13b40dcdd5a3c430dd44ea524d7881e35eae (100%)
rename {mall/.git_disabled => .git_disabled}/objects/8e/9f3e3388fc1188f4478c64da2383c7d4c1b570 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/8e/da932bc1c86026a3f7957103a4e1b337e83a48 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/90/1570cf62268d5c3b327380dc171482a76b72de (100%)
rename {mall/.git_disabled => .git_disabled}/objects/90/95fd79417185ba3d532c3f11c40b58bc068f39 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/91/80a3f5c1dcaf2c9f07b6feb729ceb33e84864f (100%)
rename {mall/.git_disabled => .git_disabled}/objects/91/9295f3c54c97388f86a3308ccf49b33e1664d4 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/92/8fe8293b72186b7e316ffbcc770464dc9d96cb (100%)
rename {mall/.git_disabled => .git_disabled}/objects/93/18327cc988ebe1c8c229f02675c8ef39305c74 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/93/d69e90ad02df30eaaca6f05777a021ebb74a18 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/93/ff692b9c7663db897c36e3a70265e299f46b65 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/94/1b343274f69f9328b2f781554fe560fdaab343 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/94/5c717a8610d2c55eb8bca924292964faa400a9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/95/8e7acc6373106b175dba4df7a51bcff3654489 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/95/b35338e0993e26c30dc2c9d25c74e93f6b3bb7 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/97/63fe0021dbf4921c086ad9b3e4e8947e60d372 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/98/b477474df113ab2d7cabc09f07767dc0252939 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/99/38dd2ac6e871cbc4fdc629b20acf1c940fc8cc (100%)
rename {mall/.git_disabled => .git_disabled}/objects/99/9dcb1d569c071fe6c14c2eaa13cd4da155d285 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/99/cf725fca7900c87ded6d8bb0e9056efa4d217d (100%)
rename {mall/.git_disabled => .git_disabled}/objects/9a/7a140d49ad83d9a42f4d1522efea893fcce83a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/9a/cd5a6b2be3b43cf61b8d7fdfe012c1bb603bd7 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/9b/6b4af19bacc8557da22fdd44bcee809c055353 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/9b/83bec86f41e9ecf811c17915f2ab69172cd716 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/9b/f2a0ee0a8cc06f8eb81e6905482da1feea58b8 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/9b/fe13984245bb959c91a49088fe0cacabda88ef (100%)
rename {mall/.git_disabled => .git_disabled}/objects/9c/c7db878956479fc36be8ea8066f8bffff1ff1e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/9d/44c43e4bf22c551b5f7f7560a96a48233b8449 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/9d/d7d4b7eeeec554dce372f34574269d0d696e13 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/9e/240061834277dddc0e83095c55d7ff40a4297b (100%)
rename {mall/.git_disabled => .git_disabled}/objects/9e/b05253d331a2ee3b24982553c5264cc7f35f41 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/9f/3c2803e3ae211b0917f347d6f316ea08f3eea8 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/a0/2fabc6e9caec1d9377fe770b8dfddd64548dad (100%)
rename {mall/.git_disabled => .git_disabled}/objects/a1/3a15bef1f0681a37746c13811fe2e858c0e4c7 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/a1/4235e2c2b220bf056dd52ca9cba123c85105ee (100%)
rename {mall/.git_disabled => .git_disabled}/objects/a1/da08fa22649d9d2a2887200b7765060b74c41d (100%)
rename {mall/.git_disabled => .git_disabled}/objects/a2/4c488a88bc281c74a5b1b646050ad94f7a2839 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/a2/6780fb0f603d233f172e4788271ca7b7849e04 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/a2/f3c8a5168b0b5e7fd683a55552283adeb47075 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/a2/fce1be5a963364ad9059cc08e6558253065eee (100%)
rename {mall/.git_disabled => .git_disabled}/objects/a3/3c28cb7c9ab96b513a0bafd3aa79cb0063289d (100%)
rename {mall/.git_disabled => .git_disabled}/objects/a3/56592b8dc6c0f09705d8ca4c734ec42869a4e0 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/a3/f194011eedefee35d0305349c20bd856ea3a96 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/a4/4bc0a5160b82e4a9fd18950a83d63d862c9767 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/a4/7b3f3e45d4d5f9110389a6622bc5c52509baa7 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/a4/dd6da00e3277b6055aaae86dfe5764112f6fee (100%)
rename {mall/.git_disabled => .git_disabled}/objects/a4/fa00c93501c27c16b745b7d262d0bd5a838dcd (100%)
rename {mall/.git_disabled => .git_disabled}/objects/a5/137cbd6ca212614699c424aabe157c727956ce (100%)
rename {mall/.git_disabled => .git_disabled}/objects/a5/e69b8b10c987f75c8fe2d1e1d4e4dce13288ac (100%)
rename {mall/.git_disabled => .git_disabled}/objects/a6/781c370dde55c913852659f483086520082310 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/a6/b8041f751d564fba29e16794931b6a993fdf4a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/a6/d2b56b759d589efcbeb81dc6593a7bc64cdab9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/a6/f3b3e43506926b3cd24f4ae40654fe407b16b4 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/a9/2848ae01f5bc2932f3bbc07978b05708c60e45 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/aa/48a3be2d0b4d6d81c3d39409b3f547a77b1c17 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/aa/bad9385dbdd5aaae23fc0d6bbc3277e14c903a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/aa/f959c27e8dddb5ab1ced2e613cdfa7357da536 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ab/038ec029662aaa9dcd7c624be85d5e35dc6e96 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ab/06fab63ebd863dcc6d8cd4c56756ca45c10be1 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ab/0d75debc10f7380d048653e0c679890fb1613b (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ab/33eb5ba264ab9d3ec9ef01476a919d3d2e69f0 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ab/de6ca42f4c753feebc842e39ea2da263b180ce (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ac/527d5198323ad1185f9c9a4868f4a80a2ee328 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ac/9090a3544275881eed66d7f104073b21048687 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ad/0b567ee3ec142af8fbfab01197f3aa858f1e78 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ad/1c8d8a5b69624952a8f65676b51ff1fae89022 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ad/787f6642b6e1c3b18a911a31f53c3a852d5f35 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ad/a359c9b1bf3e213cfee20a3f20d7a3576ceaa0 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ae/69db8c27c1e1bf488e8af3be0a6f3cccc2e89a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/af/13a2372f43dcd4439d86642e38e97aa10937b6 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/af/316e6d94c477505554b040f022f3e40457146c (100%)
rename {mall/.git_disabled => .git_disabled}/objects/af/3c23069da84a0f938cacd83e8ad088f915c255 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/af/40ac727223a4b0cf244d2b0f4c56e4604d499e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/af/5e8d686e666cdec25b853d039a7c040f093d95 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b0/fa749e58910255a9551f524e7503d3b68917c9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b1/8482381fcb794d57ad3416ca690da405a0916d (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b1/99e3abb69766a966223660960f74c7dd8263a1 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b1/b5c166730f47b07e5b49bbad32d6efab82a1e2 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b1/ee362739ffa1548f13d8c2f504b232c913161a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b2/f9f6d7d97df4563a3bc2a50476968ad0c6db60 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b3/45947d6326e8214ac27f987bbc5e7c98ad5cfa (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b3/ef5702b5b5e0faa5a1b5a7374356b4b5aeae2f (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b4/6448fc700a405206df90f42fb0db1deb64df9b (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b4/9d17901ea775085d768aaf97e236004354d093 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b5/5f2bcaff7b4711a4f44f9942f9df869538505d (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b5/9d1ba1f7c34f80721ef74659796d3f2559fcb9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b5/d595a0bd414c1a33a4884ed891f593fab323e1 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b6/05c2aa7cec0a7b660e4e37d6dff14f28b5f865 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b6/200cda285b50c855c9b7b5c9ddf5e1aec8f74e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b6/34c762b30e72de14209ca03c40039c9b0e0ae4 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b6/44120ca6e565ed49b04b6741c1932f0a32a128 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b7/740adb528068e45757fbe3172b56dbe0f8b2c0 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b7/cd10d93f8256a17b92764d4250fccb19253723 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b8/a1d782699a691668ea82b718ff78efbe60e31c (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b9/887de60894ab6aa5bea2a1c4c1811961d71ce9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b9/c605fdca0a60d7ccab0d2c6c5105575a84df3e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/b9/df9aeb02ca41b48966f098ff489ff7c0ed9f85 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ba/2aa9ff7c5e126b80a3c65e6f2212b87b65a55e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ba/62dcbe0ca8ad654833741cd195254a47bb8510 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ba/c5393914ad73706c63ea0f622b2d2bc997ee1a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ba/e5a1276f4de06eba8e26a0639641bda4a7e9ba (100%)
rename {mall/.git_disabled => .git_disabled}/objects/bb/8abb48fd457cb3cb0b8be244fd466b3af7740e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/bb/db9b58fe632b75c886ea52951ba855b3dfdfe0 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/bb/e687e533b14cce1eaca24cfc7ebcccc0f022a6 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/bd/066495c9cce3917a5971fa7c7ba69d836cc86a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/be/68b9be75bbf434039a481b2392b2791375e910 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/be/71360a2d8c4c16331ef285f2c95985e6b4f7a9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/be/78f7213596253a4ba6dcd31385910bced87b89 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/be/8f83586cc1d00f621acbc721a83c15f6ffbca4 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/be/90f1213bf8ef5948faf6a77e18f4eb533a556a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/be/ecb3bb03da266c02ffadae52e694bd710fa04e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/bf/17addbcdc94359cc58eebeb0dfaf969ecf11f1 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/bf/9255c99be9a957e9401419a59b7296963ca8c5 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/bf/a4aa8254cb94219abf03bafb1fda1e0e1397b2 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/c0/7e0e02d0261d06f1abfc680fc0710798df9cdf (100%)
rename {mall/.git_disabled => .git_disabled}/objects/c0/a444436318d393b0961f3bd309abcf098086c9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/c0/a82f29dee0fefca9f57f0b34e7804af0b38692 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/c2/bf505ea7673e41a3256c9413c30b4b57636fd3 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/c4/96dbc9f752249ada7492dbf8be9c9d2c8354e8 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/c5/255450c9c25046ab37927ebb3e36a0caf3060a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/c5/55321e256b3ab936aa6975ab489e04cd4ff616 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/c5/57a93dbaf06781e7a0654655784979671e6fad (100%)
rename {mall/.git_disabled => .git_disabled}/objects/c5/862c5fedc5e084177e9e76ff8d3b4b9d186512 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/c6/8c0e751bb47ed020d24a154c3ebf7872af903b (100%)
rename {mall/.git_disabled => .git_disabled}/objects/c6/b5d35b39ce47f9284694c38ae74310e21b81b2 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/c6/fd344a5d41140b114b26a8a338c7a4c14bd14f (100%)
rename {mall/.git_disabled => .git_disabled}/objects/c7/47221ab2ee46d32eb5507b3a47331505da9553 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/c7/d188b7021bbf38a0bcbcd6a0d57dd3c59621ee (100%)
rename {mall/.git_disabled => .git_disabled}/objects/c8/03a77c8fc16e7b18100a46a24bc4947c86843d (100%)
rename {mall/.git_disabled => .git_disabled}/objects/c8/506011bfdb818cb321d0fc48acacecf0e3d872 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/c8/677694ddc2a1d5296299f350c9d1bbb2f35d8f (100%)
rename {mall/.git_disabled => .git_disabled}/objects/c9/8e640608a6881a2c007c5f7e55909b44a5310e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/cb/4d5aa2c84df053512615a1e5fa913912420cc6 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/cc/428e74dcf7ed21d0f19bda36be359f77cad148 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/cc/f25259547a8f3b6026a988b70a4d06b5c84c36 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/cd/35b39fae023e0134f38ebd482366a2bb346556 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/cd/a2729cb49f56dd5afde5fb34bdbfccb4ccea25 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ce/29a322629863516a22ce51658cd0fbfcadf5a7 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ce/30fb618f719703864ec1d5ebd3d834580fc563 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ce/7e9fedfdf6542125f3176572bcf08c42f9f850 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ce/dc574102b9c0e727db05477123e31050d7d5b5 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/cf/f54d39455c1c52b2f8f57105f4cd44e6b25c1e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d0/083f0ea936b54764267b5514ad871ba22a9056 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d0/1e3bfaee310616a8881c7903d83bff5792b8a5 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d0/53ad24d24a1ae4b38b04ec9ed98a092ed2f7b2 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d0/74d86dadf34f92a3479d11071c37be9e6982dd (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d0/94e1a994cfe4680121a1aece838ffe8a9d3f62 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d0/fcd3dce392e103f2056197e689cf35d002761d (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d1/66519b19317188b50596fd07e6d1d3f30300f9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d2/17ab279178d653b36916619db16d283e96d739 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d2/29ca3d9d7824f9f7dd387525f5c6bc879232f8 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d2/6ae394d9750f38b975b00c9f9aae2d2511b0d3 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d2/9a1fa6fa82a1627bc8f3581d25be1157261268 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d3/7688eeb7d942ed81a6a575a58545d754f39820 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d3/a5b3e29a55feaaaa3628d7ae2b3d4c2552b38d (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d3/c7847f794643256c56e51b527c537aa2c81c90 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d4/42cb3b681694a14efa08f61722d53c3cd03323 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d4/5d8d18e90407e3bae17dae36c6b928719e7be3 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d5/16ccd139d0a84699e158c83af106efc1b9f4dd (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d5/7592ca7d17ce3d209458375b3de10683099cca (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d5/a3a4e8f06dbeac70a06b73f58743d481d48742 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d6/2bb723d93c8fd83776a74941258e1a72a8b66f (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d6/65c7eda68685c134fc9c4f1338fcd8bac7285c (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d7/29d857cf6cf273ae9828cfa5e045603c0c5d61 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d7/c5f17aae8b068b15dfcb91875bb43adbeb20bb (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d8/7cb8ab35d0bdd30e5cdec65d014965b6341f50 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d8/8b642424b4b1e5b50b40ebab41b83723b6b7b8 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d8/8f1c206f3375dac7dce5bc1b0ef45fed058837 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d9/0b5c9093f704aca73664fcd132e03ed2ff115e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d9/24957329276367c6bae3d982099edd7348b460 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/d9/6e6e2afa6e66fc91ad01eedd026643be470334 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/db/7b454b402fc847804220358387f7c6582d938e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/dc/69972b03973448aaca03859a32db7c7ac069c1 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/dc/7cadc19b0f9cd06bfe54f0310383ae8c4ee8da (100%)
rename {mall/.git_disabled => .git_disabled}/objects/dc/b29cfaaa8445902b94cea9fdef216bf2316b7a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/dc/c5c978f92a445fbb5da4352c45b05d8f1babcc (100%)
rename {mall/.git_disabled => .git_disabled}/objects/dd/5ce490a3fa10ce2219fcb3f65ba3a11419941c (100%)
rename {mall/.git_disabled => .git_disabled}/objects/dd/8ca3949d0b7dce2926083370e7d22a9364d57d (100%)
rename {mall/.git_disabled => .git_disabled}/objects/dd/e8cfaf22687175c5a92ab3497b6b3495133a12 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/dd/f5d0f485f4c7bf07f1200d1b0d70b30e7cda43 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/de/149c9b7b277dab734a599ed0826d582974b5fe (100%)
rename {mall/.git_disabled => .git_disabled}/objects/de/185b28707d3b8388563ac454cb5dd8bac50b4b (100%)
rename {mall/.git_disabled => .git_disabled}/objects/de/29cef92e4492e218c25e0610410fd83da1bd92 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/de/9460f931b697223558606dae3f466b211f0afd (100%)
rename {mall/.git_disabled => .git_disabled}/objects/de/9af775cac390862b3baf322f2c8be5c837c32c (100%)
rename {mall/.git_disabled => .git_disabled}/objects/e0/0bebc0c00a00ee1b4fa0ad162568a593742b2d (100%)
rename {mall/.git_disabled => .git_disabled}/objects/e0/a9a11e0dbb9e157e4674a9a1c337dc850e2816 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/e1/1134d730eac67ffd6837eb1ce7856d483d065c (100%)
rename {mall/.git_disabled => .git_disabled}/objects/e1/5c068482520bd48e3e944f7bfdb6bcbbed8ecf (100%)
rename {mall/.git_disabled => .git_disabled}/objects/e1/626a69fed8ddb59b87978740b7bb89e8a3f470 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/e1/84579329e67997a3577c63d0e62c3a483bd29b (100%)
rename {mall/.git_disabled => .git_disabled}/objects/e1/fdc6ff753c19c95cfacf6b2bd5fa2bc8afbbc5 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/e3/bcbd9db09db5b2930ac695e6cd33fd48c822e0 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/e4/95280b35195501c9f7a2fe21f0e36d70adfec2 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/e4/977f6c90b3c7f26126cb7c4664827cdf30ca46 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/e4/9df78a071574459a1db00aebafd69b41350977 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/e4/c08188ae246e57bee8f908f22023d00b00e355 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/e5/f32cdea2cbd114ab51d0969246d482becd1c47 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/e6/661ba698e5f4b88e0874c72d70242cbb7369ca (100%)
rename {mall/.git_disabled => .git_disabled}/objects/e6/6bc7381b3d8250a08853c5fceff6b5f7cb6d63 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/e6/f688458b9562a0077c0547c6223481afdbfa45 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/e7/105fc5009f6d014c581825f27c4935a6f724ac (100%)
rename {mall/.git_disabled => .git_disabled}/objects/e7/bc2be9e7192fda6897c7db8a142a63a2dd9137 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/e8/9a0a2d18fbf3878353467e411eb27149f5bbb4 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/e9/3fbc0b9a3316f16c0e806289f2554ca62af655 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/e9/8f8a090ee8d8500568646f514f4cd66b340a73 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/eb/929904c99d4bde19fb0f26256e8577a6b46b4d (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ec/734cdf8057fccf05dd215bc799d7cf06cdcefd (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ec/87872edd85e94af50a60a3741cda7c65d92947 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ec/bf77c45c3c930c946779891d7331f1add5bea8 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ed/67b4e9474db758abaed2bff4379e8f6149e23a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ed/7f4ffe6971776c862dcfb8b6f7547c16cf9373 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ed/fa48920de4b47ec239751f7df565acc2f33328 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ee/14d064555db9735223520adcbf25e90d9acac4 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ee/21854feb8a0dbca4c118d3e810701cf4ae260b (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ee/38af71545782e8c9bf7a3f8bbb3b8a0685d571 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ee/88c770b67440067a5a7cab9a923571eb81b26a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ee/ce696eae3274ae4e96ac4f05f38919f50634c3 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ef/3baf523b5d00ce1489ac9ea2928cd708add449 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ef/59d4de7d8cc1470a5436a9952370df8c5eb98c (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ef/81282cc0d2c587277b3659acee21c66cb163f5 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f0/5c892de9bfa5e1fb95df5e2216c460ca17904f (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f0/a56a63e3e9c48a4992f7751c2d88a5246613b7 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f0/cffee0efca301c4af7b4bc6e155aaa862e04a9 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f0/da805e6b74e14e00d511cbc041a86bcf14c6aa (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f0/e0e08d12ed54f0d19b9ba71bf2ab74790167f3 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f1/2ed85ad8faa0193be177dba82abd1d3ae7f4ba (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f1/2f19ebbaecb28f4a5d4475d9aaf935607cccab (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f1/a6541cb00cd209e28a9345d8eeb9474a4155bb (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f2/1a4ec5e47e9f6e64fb5949d8616231df448df3 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f2/37adb21a7477762f0122297b2393b719c8d5f2 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f2/837e45e68fc6a989a0bb07b3c392373bb435ec (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f2/e078b4323cddfbf5258c5824799aaff2198c03 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f2/f208f258a1a6e6247ec138c1a16eb63138d4db (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f3/18e05a703f7a17c43cfaf6bc9fd6fed3b9132d (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f3/3fd1022d33f551685c2e1bd0b8b250c1670fee (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f4/88d5c2c6b0ea1bcffb2bdb781d11a90da3f30f (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f4/985a3355e3682c4c1d5353a73299f746cf8cd3 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f4/ef196827ca598a0bf508e84b5e79517fbaf423 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f5/1846ce0cffc88f92eb8129bc3eeb74c8548361 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f5/1d5d490c34af80bec89c9c316f8b93dabe7075 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f6/8dfd6f9c60cf2a70229b99aa5050ba64f89cbb (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f7/296fce3da50b37ec1182bc1d50bf5ec1cea484 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f7/5da367769fe7f59ee642212a284d050b892b54 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f7/80dd9d10438c0ec6c101111ed792573548e7b3 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f8/cd545d362800ca6b3b10f3a7d035c11b1acb59 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/f9/e78b865489bda4fcbab4740758d177834d74f2 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/fa/0278fcea01adf22d33a38745bf40ae6c87f31f (100%)
rename {mall/.git_disabled => .git_disabled}/objects/fa/4bc8bd51a03dea8e08c230ad3b2a8094e6f02a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/fa/74c16f18af88c53b5e7ab84e71e58296b39a93 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/fa/a310bf2ade2d48a7109b3b775dd7679a122b7e (100%)
rename {mall/.git_disabled => .git_disabled}/objects/fb/5adc6f9e42463ce519816f8d6c932130ce43bb (100%)
rename {mall/.git_disabled => .git_disabled}/objects/fc/8a8495f12c9756263c0ee89805f370c7a52f61 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/fc/8b822962627c46022b85b53c5e0b5624b69907 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/fc/f50ed004fe10291906cd1accbf85cc945c333a (100%)
rename {mall/.git_disabled => .git_disabled}/objects/fd/bee0fa324a30960a9c6c9457358feb91e64478 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/fd/d0db6df282cd7c895573134e6dd2f2dd0158d6 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/fd/eed91ce0012fabc6c0d8ba225a9fb308cb3d46 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/fe/d5ab008e6c98379ca65cef433deacf73737ad1 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/fe/d6354902617f8485f6d521b4006e6ea14d76e7 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/fe/e0b5434a18776718410da56b7ecddf07ec23d4 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/fe/eea53d90bba6247f2620912acf32a5908945cb (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ff/a1f5203dd3249a2a3be1eaa30e2918923e18ef (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ff/f1ac0f73b3a9ebeb0c256a66437286c12716f6 (100%)
rename {mall/.git_disabled => .git_disabled}/objects/ff/f4371c33c25dc5bf801486d0990ca232dc174d (100%)
rename {mall/.git_disabled => .git_disabled}/objects/pack/pack-2d64d5291e8936e45e8afe09b48196d375cda344.idx (100%)
rename {mall/.git_disabled => .git_disabled}/objects/pack/pack-2d64d5291e8936e45e8afe09b48196d375cda344.pack (100%)
rename {mall/.git_disabled => .git_disabled}/objects/pack/pack-2d64d5291e8936e45e8afe09b48196d375cda344.rev (100%)
rename {mall/.git_disabled => .git_disabled}/objects/pack/pack-56653ebedd073ec8a15e1120e171acbb71747199.idx (100%)
rename {mall/.git_disabled => .git_disabled}/objects/pack/pack-56653ebedd073ec8a15e1120e171acbb71747199.pack (100%)
rename {mall/.git_disabled => .git_disabled}/objects/pack/pack-56653ebedd073ec8a15e1120e171acbb71747199.rev (100%)
rename {mall/.git_disabled => .git_disabled}/objects/pack/pack-835825c0d6dc5992012cc7de38d279d83828267a.idx (100%)
rename {mall/.git_disabled => .git_disabled}/objects/pack/pack-835825c0d6dc5992012cc7de38d279d83828267a.pack (100%)
rename {mall/.git_disabled => .git_disabled}/objects/pack/pack-835825c0d6dc5992012cc7de38d279d83828267a.rev (100%)
rename {mall/.git_disabled => .git_disabled}/objects/pack/pack-8f6ff917ed314b5db03ad3443e492f49040bb9c6.idx (100%)
rename {mall/.git_disabled => .git_disabled}/objects/pack/pack-8f6ff917ed314b5db03ad3443e492f49040bb9c6.pack (100%)
rename {mall/.git_disabled => .git_disabled}/objects/pack/pack-8f6ff917ed314b5db03ad3443e492f49040bb9c6.rev (100%)
rename {mall/.git_disabled => .git_disabled}/objects/pack/pack-a401966aedc27238be3fb9f90efd4421dbbfa1fd.idx (100%)
rename {mall/.git_disabled => .git_disabled}/objects/pack/pack-a401966aedc27238be3fb9f90efd4421dbbfa1fd.pack (100%)
rename {mall/.git_disabled => .git_disabled}/objects/pack/pack-a401966aedc27238be3fb9f90efd4421dbbfa1fd.rev (100%)
rename {mall/.git_disabled => .git_disabled}/objects/pack/pack-b8237b01850fa3d74f9b203407d5c6dec9f47238.idx (100%)
rename {mall/.git_disabled => .git_disabled}/objects/pack/pack-b8237b01850fa3d74f9b203407d5c6dec9f47238.pack (100%)
rename {mall/.git_disabled => .git_disabled}/objects/pack/pack-b8237b01850fa3d74f9b203407d5c6dec9f47238.rev (100%)
rename {mall/.git_disabled => .git_disabled}/objects/pack/pack-f74962ea43ef03cb47613de5c48ab3ba54a3b119.idx (100%)
rename {mall/.git_disabled => .git_disabled}/objects/pack/pack-f74962ea43ef03cb47613de5c48ab3ba54a3b119.pack (100%)
rename {mall/.git_disabled => .git_disabled}/objects/pack/pack-f74962ea43ef03cb47613de5c48ab3ba54a3b119.rev (100%)
rename {mall/.git_disabled => .git_disabled}/opencode (100%)
rename {mall/.git_disabled => .git_disabled}/packed-refs (100%)
rename {mall/.git_disabled => .git_disabled}/refs/heads/cyh666666/consumer (100%)
rename {mall/.git_disabled => .git_disabled}/refs/heads/main (100%)
rename {mall/.git_disabled => .git_disabled}/refs/remotes/origin/HEAD (100%)
rename {mall/.git_disabled => .git_disabled}/refs/remotes/origin/comclib-analytics (100%)
rename {mall/.git_disabled => .git_disabled}/refs/remotes/origin/cyh666666/consumer (100%)
rename {mall/.git_disabled => .git_disabled}/refs/remotes/origin/huangzhenbao-admin (100%)
rename {mall/.git_disabled => .git_disabled}/refs/remotes/origin/main (100%)
rename {mall/.git_disabled => .git_disabled}/refs/remotes/origin/ysj-delivery (100%)
rename {mall/.git_disabled => .git_disabled}/refs/tags/v-1.0.0 (100%)
create mode 100644 _debug_branches.txt
create mode 100644 _debug_gitlog.txt
create mode 100644 _debug_last_commit_files.txt
create mode 100644 _debug_reflog.txt
rename mall/ak/config.uts => ak/config_fixed.uts (78%)
rename {mall/ak => ak}/configbackup.uts (100%)
rename {mall/ak => ak}/configme.uts (100%)
create mode 100644 check_products.py
create mode 100644 check_schema_coupons.py
create mode 100644 check_shop_exists.py
create mode 100644 check_table_exists.py
rename {mall/doc_mall => doc_mall}/consumer/sql/01_wallet_and_points.sql (100%)
rename {mall/doc_mall => doc_mall}/consumer/sql/03_wallet_functions.sql (100%)
delete mode 100644 mall/.eslintrc.js
delete mode 100644 mall/.gitignore
delete mode 100644 mall/.hbuilderx/launch.json
delete mode 100644 mall/00_READ_ME_FIRST.md
delete mode 100644 mall/ADMIN_LAYOUT_GUIDE.md
delete mode 100644 mall/ADMIN_LAYOUT_IMPLEMENTATION_COMPLETE.md
delete mode 100644 mall/ADMIN_LAYOUT_PROGRESS_REPORT.md
delete mode 100644 mall/ADMIN_LAYOUT_TRANSFORMATION_100_COMPLETE.md
delete mode 100644 mall/ADMIN_LAYOUT_TRANSFORMATION_COMPLETE.md
delete mode 100644 mall/ADMIN_PAGE_CHECKLIST.csv
delete mode 100644 mall/ADMIN_PAGE_COMPLETE.md
delete mode 100644 mall/ADMIN_PAGE_COMPLIANCE_CHECKLIST.md
delete mode 100644 mall/ADMIN_PAGE_INDEX.md
delete mode 100644 mall/ADMIN_PAGE_MODIFICATION_PLAN.md
delete mode 100644 mall/ADMIN_PAGE_QUICK_REFERENCE.md
delete mode 100644 mall/ADMIN_PAGE_START_HERE.md
delete mode 100644 mall/ADMIN_PAGE_SUMMARY.md
delete mode 100644 mall/ADMIN_SIDEBAR_COMPLETE_GUIDE.md
delete mode 100644 mall/App.uvue
delete mode 100644 mall/CRMEB_DASHBOARD_README.md
delete mode 100644 mall/CRMEB_ROUTE_FIX_LOG.md
delete mode 100644 mall/FINAL_COMPLETION_REPORT.md
delete mode 100644 mall/IMPORT_RESOLUTION_FIX.md
delete mode 100644 mall/PAGES_ROUTES.md
delete mode 100644 mall/PHASE_2_COMPLETION_REPORT.md
delete mode 100644 mall/PHASE_2_INDEX.md
delete mode 100644 mall/PHASE_2_QUICK_REFERENCE.md
delete mode 100644 mall/PHASE_2_VERIFICATION_CHECKLIST.md
delete mode 100644 mall/README.md
delete mode 100644 mall/ROUTING_FIX_REPORT.md
delete mode 100644 mall/SESSION_COMPLETION_SUMMARY.md
delete mode 100644 mall/SYSTEM_INFO_DIAGNOSIS.md
delete mode 100644 mall/_admin_missing_files.txt
delete mode 100644 mall/_admin_missing_in_json.txt
delete mode 100644 mall/_admin_routes.txt
delete mode 100644 mall/components/analytics/AnalyticsAreaChart.uvue
delete mode 100644 mall/components/analytics/AnalyticsBarMini.uvue
delete mode 100644 mall/components/analytics/AnalyticsComboChart.uvue
delete mode 100644 mall/components/analytics/AnalyticsDateRangePicker.uvue
delete mode 100644 mall/components/analytics/AnalyticsDonutChart.uvue
delete mode 100644 mall/components/analytics/AnalyticsMultiLineChart.uvue
delete mode 100644 mall/components/analytics/AnalyticsPieChart.uvue
delete mode 100644 mall/components/analytics/AnalyticsRegionMap.uvue
delete mode 100644 mall/components/analytics/AnalyticsSidebarMenu.uvue
delete mode 100644 mall/components/analytics/AnalyticsTopBar.uvue
delete mode 100644 mall/components/analytics/AnalyticsUserGenderSection.uvue
delete mode 100644 mall/components/analytics/AnalyticsUserMapTable.uvue
delete mode 100644 mall/components/analytics/ChartCard.uvue
delete mode 100644 mall/components/analytics/KpiCard.uvue
delete mode 100644 mall/components/analytics/PeriodTabs.uvue
delete mode 100644 mall/components/analytics/charts/AreaLine.uvue
delete mode 100644 mall/components/analytics/charts/ComboBarLine.uvue
delete mode 100644 mall/components/analytics/charts/DonutPie.uvue
delete mode 100644 mall/components/supadb/RegionSelector.uvue
delete mode 100644 mall/components/supadb/SESSION_RECOVERY.md
delete mode 100644 mall/components/supadb/aksupa - 副本.uts
delete mode 100644 mall/components/supadb/aksupa.uts
delete mode 100644 mall/components/supadb/aksupainstance - 副本.uts
delete mode 100644 mall/components/supadb/aksupainstance.uts
delete mode 100644 mall/components/supadb/aksuparealtime.uts
delete mode 100644 mall/components/supadb/docs/CHANGELOG.md
delete mode 100644 mall/components/supadb/docs/SIMPLIFIED_API_GUIDE.md
delete mode 100644 mall/components/supadb/docs/TYPED_QUERIES_README.md
delete mode 100644 mall/components/supadb/docs/TYPE_CONVERSION_FIX_SUMMARY.md
delete mode 100644 mall/components/supadb/docs/aksupareal.md
delete mode 100644 mall/components/supadb/rag.uts
delete mode 100644 mall/components/supadb/raginstance.uts
delete mode 100644 mall/components/supadb/supadb.uvue
delete mode 100644 mall/components/supadb/typed-examples.uts
delete mode 100644 mall/create_placeholder_pages.py
delete mode 100644 mall/doc_mall/FRONTEND_BACKEND_DEBUGGING.md
delete mode 100644 mall/doc_mall/MIGRATION_CHECKLIST.md
delete mode 100644 mall/doc_mall/MIGRATION_GUIDE.md
delete mode 100644 mall/doc_mall/MIGRATION_SUMMARY.md
delete mode 100644 mall/doc_mall/MODULE_ANALYSIS.md
delete mode 100644 mall/doc_mall/QUICK_START_MIGRATION.md
delete mode 100644 mall/doc_mall/README.md
delete mode 100644 mall/doc_mall/README_subscription_consumer.md
delete mode 100644 mall/doc_mall/SUPABASE_DATA_MIGRATION_GUIDE.md
delete mode 100644 mall/doc_mall/TECHNICAL_IMPLEMENTATION.md
delete mode 100644 mall/doc_mall/analysis/user_compatibility_analysis.md
delete mode 100644 mall/doc_mall/consumer/sql/add_coupons.sql
delete mode 100644 mall/doc_mall/consumer/sql/add_footprints_table.sql
delete mode 100644 mall/doc_mall/consumer/sql/add_messages_and_notifications.sql
delete mode 100644 mall/doc_mall/consumer/sql/add_order_notification.sql
delete mode 100644 mall/doc_mall/consumer/sql/clean_cart.sql
delete mode 100644 mall/doc_mall/consumer/sql/complete_mall_database.sql
delete mode 100644 mall/doc_mall/consumer/sql/create_mall_subscription_tables.sql
delete mode 100644 mall/doc_mall/consumer/sql/create_supabase_auth_users.sql
delete mode 100644 mall/doc_mall/consumer/sql/fix_product_categories.sql
delete mode 100644 mall/doc_mall/consumer/sql/insert_default_skus.sql
delete mode 100644 mall/doc_mall/consumer/sql/insert_extra_products.sql
delete mode 100644 mall/doc_mall/consumer/sql/insert_missing_category_products.sql
delete mode 100644 mall/doc_mall/consumer/sql/insert_specific_category_products.sql
delete mode 100644 mall/doc_mall/consumer/sql/insert_test_addresses.sql
delete mode 100644 mall/doc_mall/consumer/sql/mall_alter_upgrade.sql
delete mode 100644 mall/doc_mall/consumer/sql/mall_database_check.sql
delete mode 100644 mall/doc_mall/consumer/sql/mall_fields_only_upgrade.sql
delete mode 100644 mall/doc_mall/consumer/sql/mall_migration.sql
delete mode 100644 mall/doc_mall/consumer/sql/mall_seo_security.sql
delete mode 100644 mall/doc_mall/consumer/sql/mock_data_insert.sql
delete mode 100644 mall/doc_mall/consumer/sql/product_database.sql
delete mode 100644 mall/doc_mall/consumer/sql/quick_role_migration.sql
delete mode 100644 mall/doc_mall/consumer/sql/role_field_cleanup.sql
delete mode 100644 mall/doc_mall/consumer/sql/role_field_unification.sql
delete mode 100644 mall/doc_mall/consumer/sql/simulate_multi_shop.sql
delete mode 100644 mall/doc_mall/consumer/sql/subscription_guard_trigger.sql
delete mode 100644 mall/doc_mall/consumer/sql/subscription_rls_policies.sql
delete mode 100644 mall/doc_mall/consumer/sql/update_product_attributes.sql
delete mode 100644 mall/doc_mall/consumer/sql/update_product_attributes_refined.sql
delete mode 100644 mall/doc_mall/consumer/sql/update_product_attributes_taobao.sql
delete mode 100644 mall/doc_mall/consumer/sql/user_compatibility_implementation.sql
delete mode 100644 mall/doc_mall/consumer/sql/validation_test.sql
delete mode 100644 mall/doc_mall/consumer/sql/verify_mock_data_fix.sql
delete mode 100644 mall/doc_mall/database/ROLE_FIELD_FIX_REPORT.md
delete mode 100644 mall/doc_mall/database/ROLE_FIELD_SUMMARY.md
delete mode 100644 mall/doc_mall/database/UPGRADE_GUIDE.md
delete mode 100644 mall/doc_mall/database/VARIABLE_CONFLICT_FIX_REPORT.md
delete mode 100644 mall/doc_mall/database/complete_deployment_guide.md
delete mode 100644 mall/doc_mall/database/create_supabase_auth_users.js
delete mode 100644 mall/doc_mall/database/database_creation_report.md
delete mode 100644 mall/doc_mall/database/database_syntax_fix_report.md
delete mode 100644 mall/doc_mall/database/deployment_guide.md
delete mode 100644 mall/doc_mall/database/mock_data_documentation.md
delete mode 100644 mall/doc_mall/database/seo_optimization_guide.md
delete mode 100644 mall/doc_mall/database/seo_optimization_report.md
delete mode 100644 mall/doc_mall/database/type_error_fix_report.md
delete mode 100644 mall/doc_mall/migrate.ps1
delete mode 100644 mall/doc_mall/migrate.sh
delete mode 100644 mall/doc_mall/migration_complete_report.md
delete mode 100644 mall/doc_mall/reports/PAYMENT_PAGE_GUIDE.md
delete mode 100644 mall/doc_mall/reports/detail_pages_report.md
delete mode 100644 mall/doc_mall/reports/profile_pages_report.md
delete mode 100644 mall/doc_mall/reports/system_generation_report.md
delete mode 100644 mall/doc_mall/user_reuse_summary.md
delete mode 100644 mall/doc_mall/裂变红包.md
delete mode 100644 mall/docs/ADMIN_MANAGEMENT_GUIDE.md
delete mode 100644 mall/docs/AGENT_PROJECT_SPEC.md
delete mode 100644 mall/docs/CRMEB_DASHBOARD_GUIDE.md
delete mode 100644 mall/docs/CRMEB_TO_UVUE_MIGRATION_GUIDE.md
delete mode 100644 mall/docs/FRONTEND_ARCHITECTURE_ANALYSIS.md
delete mode 100644 mall/docs/PAGE_STRUCTURE_ANALYSIS.md
delete mode 100644 mall/docs/UNI_APP_X_PAGE_FIX_GUIDE.md
delete mode 100644 mall/docs/admin/00_READ_ME_FIRST.md
delete mode 100644 mall/docs/admin/ADMIN_LAYOUT_GUIDE.md
delete mode 100644 mall/docs/admin/ADMIN_LAYOUT_IMPLEMENTATION_COMPLETE.md
delete mode 100644 mall/docs/admin/ADMIN_LAYOUT_PROGRESS_REPORT.md
delete mode 100644 mall/docs/admin/ADMIN_LAYOUT_TRANSFORMATION_100_COMPLETE.md
delete mode 100644 mall/docs/admin/ADMIN_LAYOUT_TRANSFORMATION_COMPLETE.md
delete mode 100644 mall/docs/admin/ADMIN_MANAGEMENT_GUIDE.md
delete mode 100644 mall/docs/admin/ADMIN_PAGES_REFACTORING_PLAN.md
delete mode 100644 mall/docs/admin/ADMIN_PAGE_CHECKLIST.csv
delete mode 100644 mall/docs/admin/ADMIN_PAGE_COMPLETE.md
delete mode 100644 mall/docs/admin/ADMIN_PAGE_COMPLIANCE_CHECKLIST.md
delete mode 100644 mall/docs/admin/ADMIN_PAGE_INDEX.md
delete mode 100644 mall/docs/admin/ADMIN_PAGE_MODIFICATION_PLAN.md
delete mode 100644 mall/docs/admin/ADMIN_PAGE_QUICK_REFERENCE.md
delete mode 100644 mall/docs/admin/ADMIN_PAGE_START_HERE.md
delete mode 100644 mall/docs/admin/ADMIN_PAGE_SUMMARY.md
delete mode 100644 mall/docs/admin/ADMIN_PROJECT_FINAL_REPORT.md
delete mode 100644 mall/docs/admin/ADMIN_REFACTOR_INDEX.md
delete mode 100644 mall/docs/admin/ADMIN_REFACTOR_PROGRESS.md
delete mode 100644 mall/docs/admin/COMPONENT_SPECIFICATION.md
delete mode 100644 mall/docs/admin/CRMEB_DASHBOARD_GUIDE.md
delete mode 100644 mall/docs/admin/CRMEB_TO_UVUE_MIGRATION_GUIDE.md
delete mode 100644 mall/docs/admin/CRMEB_UVUE_MIGRATION_GUIDE.md
delete mode 100644 mall/docs/admin/DELIVERY_SUMMARY.md
delete mode 100644 mall/docs/admin/DESIGN_DECORATION_GUIDE.md
delete mode 100644 mall/docs/admin/DESIGN_IMPLEMENTATION_REPORT.md
delete mode 100644 mall/docs/admin/DESIGN_MODULE_UPGRADE_REPORT.md
delete mode 100644 mall/docs/admin/DESIGN_MODULE_USER_GUIDE.md
delete mode 100644 mall/docs/admin/DESIGN_QUICK_REFERENCE.md
delete mode 100644 mall/docs/admin/ENGINEERING_BEST_PRACTICES.md
delete mode 100644 mall/docs/admin/FRONTEND_ARCHITECTURE_ANALYSIS.md
delete mode 100644 mall/docs/admin/IMPLEMENTATION_ROADMAP.md
delete mode 100644 mall/docs/admin/ORDER_MENU_HIGHLIGHT_COMPLETION_REPORT.md
delete mode 100644 mall/docs/admin/ORDER_MENU_HIGHLIGHT_FIX.md
delete mode 100644 mall/docs/admin/ORDER_MENU_HIGHLIGHT_QUICK_FIX.md
delete mode 100644 mall/docs/admin/PAGES_ROUTES.md
delete mode 100644 mall/docs/admin/PAGE_STRUCTURE_ANALYSIS.md
delete mode 100644 mall/docs/admin/PAGE_STRUCTURE_SPECIFICATION.md
delete mode 100644 mall/docs/admin/PROJECT_COMPLETION_REPORT.md
delete mode 100644 mall/docs/admin/QUICK_REFERENCE.md
delete mode 100644 mall/docs/admin/QUICK_START_NEW_DEVELOPMENT.md
delete mode 100644 mall/docs/admin/README.md
delete mode 100644 mall/docs/admin/REFACTOR_BEFORE_AFTER.md
delete mode 100644 mall/docs/admin/REFACTOR_SUMMARY.md
delete mode 100644 mall/docs/admin/SERVICE_DELIVERY_CHECKLIST.md
delete mode 100644 mall/docs/admin/SERVICE_MODULE_IMPLEMENTATION.md
delete mode 100644 mall/docs/admin/SERVICE_PROJECT_SUMMARY.md
delete mode 100644 mall/docs/admin/SERVICE_QUICK_START.md
delete mode 100644 mall/docs/admin/STYLE_SPECIFICATION.md
delete mode 100644 mall/docs/admin/SYSTEM_INFO_FIX_GUIDE.md
delete mode 100644 mall/docs/admin/SYSTEM_INFO_ROOT_CAUSE.md
delete mode 100644 mall/docs/admin/SYSTEM_INFO_SIDEBAR_FIX.md
delete mode 100644 mall/docs/admin/UNI_APP_X_PAGE_FIX_GUIDE.md
delete mode 100644 mall/docs/sql/00_overview.md
delete mode 100644 mall/docs/sql/01_tables_catalog.md
delete mode 100644 mall/docs/sql/02_relationships_er.md
delete mode 100644 mall/docs/sql/03_enums_status_dict.md
delete mode 100644 mall/docs/sql/04_triggers_and_functions.md
delete mode 100644 mall/docs/sql/05_rls_permissions_matrix.md
delete mode 100644 mall/docs/sql/06_indexes_and_query_patterns.md
delete mode 100644 mall/docs/sql/07_business_workflows.md
delete mode 100644 mall/docs/sql/08_data_consistency_boundaries.md
delete mode 100644 mall/docs/sql/09_migrations_and_versions.md
delete mode 100644 mall/docs/sql/10_quality_checks.md
delete mode 100644 mall/docs/sql/11_roles_and_permissions_strategy.md
delete mode 100644 mall/docs/sql/README.md
delete mode 100644 mall/docs/sql_summary.md
delete mode 100644 mall/index.html
delete mode 100644 mall/layouts/admin/AdminLayout.uvue
delete mode 100644 mall/layouts/admin/CRMEB_ROUTER_MIGRATION_COMPLETE.md
delete mode 100644 mall/layouts/admin/README.md
delete mode 100644 mall/layouts/admin/ROUTING_CLEANUP_COMPLETE.md
delete mode 100644 mall/layouts/admin/components/AdminAside.uvue
delete mode 100644 mall/layouts/admin/components/AdminFooter.uvue
delete mode 100644 mall/layouts/admin/components/AdminHeader.uvue
delete mode 100644 mall/layouts/admin/components/AdminSubsider.uvue
delete mode 100644 mall/layouts/admin/components/AdminTagsView.uvue
delete mode 100644 mall/layouts/admin/components/AdminTopBar.uvue
delete mode 100644 mall/layouts/admin/components/PlaceholderPage.uvue
delete mode 100644 mall/layouts/admin/components/card.uvue
delete mode 100644 mall/layouts/admin/index.uvue
delete mode 100644 mall/layouts/admin/pages/HomeIndex.uvue
delete mode 100644 mall/layouts/admin/router/adminComponentMap.uts
delete mode 100644 mall/layouts/admin/router/adminRoutes.uts
delete mode 100644 mall/layouts/admin/state.uts
delete mode 100644 mall/layouts/admin/store/adminNavStore.uts
delete mode 100644 mall/layouts/admin/types.uts
delete mode 100644 mall/layouts/admin/utils/echarts-config.uts
delete mode 100644 mall/layouts/admin/utils/nav.uts
delete mode 100644 mall/layouts/admin/utils/tabs.uts
delete mode 100644 mall/main.js
delete mode 100644 mall/main.uts
delete mode 100644 mall/mall_sql/README.md
delete mode 100644 mall/mall_sql/deploy.bat
delete mode 100644 mall/mall_sql/deploy.sh
delete mode 100644 mall/mall_sql/docs/FRONTEND_BACKEND_DEBUGGING.md
delete mode 100644 mall/mall_sql/docs/MALL_README.md
delete mode 100644 mall/mall_sql/docs/MIGRATION_CHECKLIST.md
delete mode 100644 mall/mall_sql/docs/MIGRATION_GUIDE.md
delete mode 100644 mall/mall_sql/docs/MIGRATION_SUMMARY.md
delete mode 100644 mall/mall_sql/docs/MODULE_ANALYSIS.md
delete mode 100644 mall/mall_sql/docs/QUICK_START_MIGRATION.md
delete mode 100644 mall/mall_sql/docs/README.md
delete mode 100644 mall/mall_sql/docs/README_subscription_consumer.md
delete mode 100644 mall/mall_sql/docs/ROLE_FIELD_FIX_REPORT.md
delete mode 100644 mall/mall_sql/docs/ROLE_FIELD_SUMMARY.md
delete mode 100644 mall/mall_sql/docs/TECHNICAL_IMPLEMENTATION.md
delete mode 100644 mall/mall_sql/docs/UNI_APP_X_MIGRATION.md
delete mode 100644 mall/mall_sql/docs/UPGRADE_GUIDE.md
delete mode 100644 mall/mall_sql/docs/VARIABLE_CONFLICT_FIX_REPORT.md
delete mode 100644 mall/mall_sql/docs/analysis/user_compatibility_analysis.md
delete mode 100644 mall/mall_sql/docs/complete_deployment_guide.md
delete mode 100644 mall/mall_sql/docs/database_creation_report.md
delete mode 100644 mall/mall_sql/docs/database_syntax_fix_report.md
delete mode 100644 mall/mall_sql/docs/deployment_guide.md
delete mode 100644 mall/mall_sql/docs/migration_complete_report.md
delete mode 100644 mall/mall_sql/docs/mock_data_documentation.md
delete mode 100644 mall/mall_sql/docs/reports/detail_pages_report.md
delete mode 100644 mall/mall_sql/docs/reports/profile_pages_report.md
delete mode 100644 mall/mall_sql/docs/reports/system_generation_report.md
delete mode 100644 mall/mall_sql/docs/seo_optimization_guide.md
delete mode 100644 mall/mall_sql/docs/seo_optimization_report.md
delete mode 100644 mall/mall_sql/docs/type_error_fix_report.md
delete mode 100644 mall/mall_sql/docs/user_reuse_summary.md
delete mode 100644 mall/mall_sql/docs/裂变红包.md
delete mode 100644 mall/mall_sql/migrations/analytics_upgrade.sql
delete mode 100644 mall/mall_sql/migrations/mall_alter_upgrade.sql
delete mode 100644 mall/mall_sql/migrations/mall_fields_only_upgrade.sql
delete mode 100644 mall/mall_sql/migrations/mall_migration.sql
delete mode 100644 mall/mall_sql/migrations/ml_analytics_rpcs.sql
delete mode 100644 mall/mall_sql/migrations/quick_role_migration.sql
delete mode 100644 mall/mall_sql/migrations/role_field_cleanup.sql
delete mode 100644 mall/mall_sql/migrations/role_field_unification.sql
delete mode 100644 mall/mall_sql/migrations/user_compatibility_implementation.sql
delete mode 100644 mall/mall_sql/schemas/ak_contents_product_extension.sql
delete mode 100644 mall/mall_sql/schemas/complete_mall_database.sql
delete mode 100644 mall/mall_sql/schemas/mall_seo_security.sql
delete mode 100644 mall/mall_sql/schemas/product_database.sql
delete mode 100644 mall/mall_sql/scripts/migrate.ps1
delete mode 100644 mall/mall_sql/scripts/migrate.sh
delete mode 100644 mall/mall_sql/subscription/create_mall_subscription_tables.sql
delete mode 100644 mall/mall_sql/subscription/subscription_guard_trigger.sql
delete mode 100644 mall/mall_sql/subscription/subscription_rls_policies.sql
delete mode 100644 mall/mall_sql/tests/create_supabase_auth_users.sql
delete mode 100644 mall/mall_sql/tests/mall_database_check.sql
delete mode 100644 mall/mall_sql/tests/mock_data_insert.sql
delete mode 100644 mall/mall_sql/tests/validation_test.sql
delete mode 100644 mall/mall_sql/tests/verify_mock_data_fix.sql
delete mode 100644 mall/manifest.json
delete mode 100644 mall/package-lock.json
delete mode 100644 mall/package.json
delete mode 100644 mall/pages-simple.json
delete mode 100644 mall/pages.json
delete mode 100644 mall/pages/SQL_FILES_CLEANUP_SUMMARY.md
delete mode 100644 mall/pages/SQL_FILES_ORGANIZATION.md
delete mode 100644 mall/pages/dashboard/OrderChart.uvue
delete mode 100644 mall/pages/dashboard/PurchaseUserPie.uvue
delete mode 100644 mall/pages/dashboard/UserTrendChart.uvue
delete mode 100644 mall/pages/info/README.md
delete mode 100644 mall/pages/info/chat.uvue
delete mode 100644 mall/pages/info/comindex.uvue
delete mode 100644 mall/pages/info/cominfoedit.uvue
delete mode 100644 mall/pages/info/comments.uvue
delete mode 100644 mall/pages/info/detail.uvue
delete mode 100644 mall/pages/info/index.uvue
delete mode 100644 mall/pages/info/search.uvue
delete mode 100644 mall/pages/info/settings.uvue
delete mode 100644 mall/pages/info/test-utils.uts
delete mode 100644 mall/pages/info/test/i18n-test.uvue
delete mode 100644 mall/pages/info/topic-detail.uvue
delete mode 100644 mall/pages/info/topics.uvue
delete mode 100644 mall/pages/info/types.uts
delete mode 100644 mall/pages/info/video-player.uvue
delete mode 100644 mall/pages/info/video-types.uts
delete mode 100644 mall/pages/llm/asr.uvue
delete mode 100644 mall/pages/mall/admin/article/article.uts
delete mode 100644 mall/pages/mall/admin/article/articleCategory.uts
delete mode 100644 mall/pages/mall/admin/article/category.uvue
delete mode 100644 mall/pages/mall/admin/article/create.uvue
delete mode 100644 mall/pages/mall/admin/article/edit.uvue
delete mode 100644 mall/pages/mall/admin/article/index.uvue
delete mode 100644 mall/pages/mall/admin/cms/article/list.uvue
delete mode 100644 mall/pages/mall/admin/cms/category/list.uvue
delete mode 100644 mall/pages/mall/admin/content/index.uvue
delete mode 100644 mall/pages/mall/admin/customer-service/auto-reply.uvue
delete mode 100644 mall/pages/mall/admin/customer-service/config.uvue
delete mode 100644 mall/pages/mall/admin/customer-service/list.uvue
delete mode 100644 mall/pages/mall/admin/customer-service/messages.uvue
delete mode 100644 mall/pages/mall/admin/customer-service/script.uvue
delete mode 100644 mall/pages/mall/admin/design/README.md
delete mode 100644 mall/pages/mall/admin/design/category.uvue
delete mode 100644 mall/pages/mall/admin/design/components.uvue
delete mode 100644 mall/pages/mall/admin/design/config.uts
delete mode 100644 mall/pages/mall/admin/design/custom.uvue
delete mode 100644 mall/pages/mall/admin/design/data-config.uvue
delete mode 100644 mall/pages/mall/admin/design/design.uts
delete mode 100644 mall/pages/mall/admin/design/homepage.uvue
delete mode 100644 mall/pages/mall/admin/design/index.uvue
delete mode 100644 mall/pages/mall/admin/design/link-management.uvue
delete mode 100644 mall/pages/mall/admin/design/material.uvue
delete mode 100644 mall/pages/mall/admin/design/product.uvue
delete mode 100644 mall/pages/mall/admin/design/templates.uvue
delete mode 100644 mall/pages/mall/admin/design/theme-style.uvue
delete mode 100644 mall/pages/mall/admin/design/user.uvue
delete mode 100644 mall/pages/mall/admin/finance/record.uvue
delete mode 100644 mall/pages/mall/admin/homePage/components/KpiMiniCard.uvue
delete mode 100644 mall/pages/mall/admin/homePage/index.uvue
delete mode 100644 mall/pages/mall/admin/homePage/index.uvue.bak
delete mode 100644 mall/pages/mall/admin/index_new.uvue
delete mode 100644 mall/pages/mall/admin/maintain/data/city-data.uvue
delete mode 100644 mall/pages/mall/admin/maintain/data/clear-data.uvue
delete mode 100644 mall/pages/mall/admin/maintain/data/logistics-company.uvue
delete mode 100644 mall/pages/mall/admin/maintain/dev-config/category.uvue
delete mode 100644 mall/pages/mall/admin/maintain/dev-config/combination-data.uvue
delete mode 100644 mall/pages/mall/admin/maintain/dev-config/cron-job.uvue
delete mode 100644 mall/pages/mall/admin/maintain/dev-config/custom-event.uvue
delete mode 100644 mall/pages/mall/admin/maintain/dev-config/module-config.uvue
delete mode 100644 mall/pages/mall/admin/maintain/dev-config/permission.uvue
delete mode 100644 mall/pages/mall/admin/maintain/dev-tools/api.uvue
delete mode 100644 mall/pages/mall/admin/maintain/dev-tools/codegen.uvue
delete mode 100644 mall/pages/mall/admin/maintain/dev-tools/data-dict.uvue
delete mode 100644 mall/pages/mall/admin/maintain/dev-tools/database.uvue
delete mode 100644 mall/pages/mall/admin/maintain/dev-tools/file.uvue
delete mode 100644 mall/pages/mall/admin/maintain/external/account.uvue
delete mode 100644 mall/pages/mall/admin/maintain/i18n/language-detail.uvue
delete mode 100644 mall/pages/mall/admin/maintain/i18n/language-list.uvue
delete mode 100644 mall/pages/mall/admin/maintain/i18n/region-list.uvue
delete mode 100644 mall/pages/mall/admin/maintain/i18n/translate-config.uvue
delete mode 100644 mall/pages/mall/admin/maintain/security/online-upgrade.uvue
delete mode 100644 mall/pages/mall/admin/maintain/security/refresh-cache.uvue
delete mode 100644 mall/pages/mall/admin/maintain/security/system-log.uvue
delete mode 100644 mall/pages/mall/admin/maintain/system-info.uvue
delete mode 100644 mall/pages/mall/admin/marketing-management.uvue
delete mode 100644 mall/pages/mall/admin/marketing/bargain/list.uvue
delete mode 100644 mall/pages/mall/admin/marketing/combination/list.uvue
delete mode 100644 mall/pages/mall/admin/marketing/coupon/list.uvue
delete mode 100644 mall/pages/mall/admin/marketing/coupon/receive.uvue
delete mode 100644 mall/pages/mall/admin/marketing/groupbuy/goods.uvue
delete mode 100644 mall/pages/mall/admin/marketing/groupbuy/list.uvue
delete mode 100644 mall/pages/mall/admin/marketing/index.uvue
delete mode 100644 mall/pages/mall/admin/marketing/integral/list.uvue
delete mode 100644 mall/pages/mall/admin/marketing/live/anchor.uvue
delete mode 100644 mall/pages/mall/admin/marketing/live/goods.uvue
delete mode 100644 mall/pages/mall/admin/marketing/live/room.uvue
delete mode 100644 mall/pages/mall/admin/marketing/lottery/config.uvue
delete mode 100644 mall/pages/mall/admin/marketing/lottery/list.uvue
delete mode 100644 mall/pages/mall/admin/marketing/member/card.uvue
delete mode 100644 mall/pages/mall/admin/marketing/member/config.uvue
delete mode 100644 mall/pages/mall/admin/marketing/member/record.uvue
delete mode 100644 mall/pages/mall/admin/marketing/member/rights.uvue
delete mode 100644 mall/pages/mall/admin/marketing/member/type.uvue
delete mode 100644 mall/pages/mall/admin/marketing/newcomer.uvue
delete mode 100644 mall/pages/mall/admin/marketing/points/config.uvue
delete mode 100644 mall/pages/mall/admin/marketing/points/goods.uvue
delete mode 100644 mall/pages/mall/admin/marketing/points/index.uvue
delete mode 100644 mall/pages/mall/admin/marketing/points/order.uvue
delete mode 100644 mall/pages/mall/admin/marketing/points/record.uvue
delete mode 100644 mall/pages/mall/admin/marketing/points/stats.uvue
delete mode 100644 mall/pages/mall/admin/marketing/recharge/amount.uvue
delete mode 100644 mall/pages/mall/admin/marketing/recharge/config.uvue
delete mode 100644 mall/pages/mall/admin/marketing/recharge/record.uvue
delete mode 100644 mall/pages/mall/admin/marketing/seckill/config.uvue
delete mode 100644 mall/pages/mall/admin/marketing/seckill/goods.uvue
delete mode 100644 mall/pages/mall/admin/marketing/seckill/list.uvue
delete mode 100644 mall/pages/mall/admin/marketing/signin/record.uvue
delete mode 100644 mall/pages/mall/admin/marketing/signin/rule.uvue
delete mode 100644 mall/pages/mall/admin/order-management.uvue
delete mode 100644 mall/pages/mall/admin/order/aftersales-order/index.uvue
delete mode 100644 mall/pages/mall/admin/order/cashier-order/index.uvue
delete mode 100644 mall/pages/mall/admin/order/list.uvue
delete mode 100644 mall/pages/mall/admin/order/order-configuration/index.uvue
delete mode 100644 mall/pages/mall/admin/order/order-management/index.uvue
delete mode 100644 mall/pages/mall/admin/order/order-statistics/index.uvue
delete mode 100644 mall/pages/mall/admin/order/write-off-records/index.uvue
delete mode 100644 mall/pages/mall/admin/product-classification.uvue
delete mode 100644 mall/pages/mall/admin/product-labels.uvue
delete mode 100644 mall/pages/mall/admin/product-management.uvue
delete mode 100644 mall/pages/mall/admin/product-parameters.uvue
delete mode 100644 mall/pages/mall/admin/product-protection.uvue
delete mode 100644 mall/pages/mall/admin/product-reviews.uvue
delete mode 100644 mall/pages/mall/admin/product-specifications.uvue
delete mode 100644 mall/pages/mall/admin/product-statistics.uvue
delete mode 100644 mall/pages/mall/admin/product/attr.uvue
delete mode 100644 mall/pages/mall/admin/product/classify.uvue
delete mode 100644 mall/pages/mall/admin/product/label.uvue
delete mode 100644 mall/pages/mall/admin/product/list.uvue
delete mode 100644 mall/pages/mall/admin/product/param.uvue
delete mode 100644 mall/pages/mall/admin/product/product-classification/index.uvue
delete mode 100644 mall/pages/mall/admin/product/product-label/index.uvue
delete mode 100644 mall/pages/mall/admin/product/product-management/index.uvue
delete mode 100644 mall/pages/mall/admin/product/product-param/index.uvue
delete mode 100644 mall/pages/mall/admin/product/product-protection/index.uvue
delete mode 100644 mall/pages/mall/admin/product/product-reviews/index.uvue
delete mode 100644 mall/pages/mall/admin/product/product-specifications/index.uvue
delete mode 100644 mall/pages/mall/admin/product/product-statistics/index.uvue
delete mode 100644 mall/pages/mall/admin/product/protection.uvue
delete mode 100644 mall/pages/mall/admin/product/reply.uvue
delete mode 100644 mall/pages/mall/admin/service/autoReply.uvue
delete mode 100644 mall/pages/mall/admin/service/config.uvue
delete mode 100644 mall/pages/mall/admin/service/index.uvue
delete mode 100644 mall/pages/mall/admin/service/message.uvue
delete mode 100644 mall/pages/mall/admin/service/script.uvue
delete mode 100644 mall/pages/mall/admin/service/service.uts
delete mode 100644 mall/pages/mall/admin/setting/system/admin.uvue
delete mode 100644 mall/pages/mall/admin/setting/system/config.uvue
delete mode 100644 mall/pages/mall/admin/setting/system/role.uvue
delete mode 100644 mall/pages/mall/admin/statistic/index.uvue
delete mode 100644 mall/pages/mall/admin/subscription/plan-management.uvue
delete mode 100644 mall/pages/mall/admin/subscription/user-subscriptions.uvue
delete mode 100644 mall/pages/mall/admin/system-settings.uvue
delete mode 100644 mall/pages/mall/admin/system/agreement-settings.uvue
delete mode 100644 mall/pages/mall/admin/system/api/collect.uvue
delete mode 100644 mall/pages/mall/admin/system/api/logistics.uvue
delete mode 100644 mall/pages/mall/admin/system/api/pay.uvue
delete mode 100644 mall/pages/mall/admin/system/api/sms.uvue
delete mode 100644 mall/pages/mall/admin/system/api/storage.uvue
delete mode 100644 mall/pages/mall/admin/system/api/waybill.uvue
delete mode 100644 mall/pages/mall/admin/system/api/yht/config.uvue
delete mode 100644 mall/pages/mall/admin/system/api/yht/page.uvue
delete mode 100644 mall/pages/mall/admin/system/index.uvue
delete mode 100644 mall/pages/mall/admin/system/message-management.uvue
delete mode 100644 mall/pages/mall/admin/system/permission/admin-list.uvue
delete mode 100644 mall/pages/mall/admin/system/permission/permission-setting.uvue
delete mode 100644 mall/pages/mall/admin/system/permission/role.uvue
delete mode 100644 mall/pages/mall/admin/system/receipt-settings.uvue
delete mode 100644 mall/pages/mall/admin/system/shipping/courier.uvue
delete mode 100644 mall/pages/mall/admin/system/shipping/freight-template.uvue
delete mode 100644 mall/pages/mall/admin/system/shipping/pickup/points.uvue
delete mode 100644 mall/pages/mall/admin/system/shipping/pickup/verifiers.uvue
delete mode 100644 mall/pages/mall/admin/user-management.uvue
delete mode 100644 mall/pages/mall/admin/user-statistics.uvue
delete mode 100644 mall/pages/mall/admin/user/MemberConfig.uvue
delete mode 100644 mall/pages/mall/admin/user/Statistic.uvue
delete mode 100644 mall/pages/mall/admin/user/grade/card.uvue
delete mode 100644 mall/pages/mall/admin/user/grade/record.uvue
delete mode 100644 mall/pages/mall/admin/user/grade/right.uvue
delete mode 100644 mall/pages/mall/admin/user/grade/type.uvue
delete mode 100644 mall/pages/mall/admin/user/group.uvue
delete mode 100644 mall/pages/mall/admin/user/label.uvue
delete mode 100644 mall/pages/mall/admin/user/level.uvue
delete mode 100644 mall/pages/mall/admin/user/list.uvue
delete mode 100644 mall/pages/mall/admin/user/user-configuration/index.uvue
delete mode 100644 mall/pages/mall/admin/user/user-grouping/index.uvue
delete mode 100644 mall/pages/mall/admin/user/user-label/index.uvue
delete mode 100644 mall/pages/mall/admin/user/user-level/index.uvue
delete mode 100644 mall/pages/mall/admin/user/user-management/index.uvue
delete mode 100644 mall/pages/mall/admin/user/user-statistics/index.uvue
delete mode 100644 mall/pages/mall/analytics/coupon-analysis.uvue
delete mode 100644 mall/pages/mall/analytics/custom-report.uvue
delete mode 100644 mall/pages/mall/analytics/data-detail.uvue
delete mode 100644 mall/pages/mall/analytics/delivery-analysis.uvue
delete mode 100644 mall/pages/mall/analytics/docs/ANALYTICS_DB_DESIGN.md
delete mode 100644 mall/pages/mall/analytics/docs/ANALYTICS_DB_QUICK_START.md
delete mode 100644 mall/pages/mall/analytics/docs/ANALYTICS_PAGES_ANALYSIS.md
delete mode 100644 mall/pages/mall/analytics/docs/ANALYTICS_UI_DESIGN.md
delete mode 100644 mall/pages/mall/analytics/docs/IMPLEMENTATION_STATUS.md
delete mode 100644 mall/pages/mall/analytics/docs/README.md
delete mode 100644 mall/pages/mall/analytics/docs/URL_ACCESS.md
delete mode 100644 mall/pages/mall/analytics/index.uvue
delete mode 100644 mall/pages/mall/analytics/insight-detail.uvue
delete mode 100644 mall/pages/mall/analytics/market-trends.uvue
delete mode 100644 mall/pages/mall/analytics/product-insights.uvue
delete mode 100644 mall/pages/mall/analytics/profile.uvue
delete mode 100644 mall/pages/mall/analytics/report-detail.uvue
delete mode 100644 mall/pages/mall/analytics/sales-report.uvue
delete mode 100644 mall/pages/mall/analytics/test/01_ml_analytics_rpcs_user.sql
delete mode 100644 mall/pages/mall/analytics/test/02_ml_analytics_rpcs_sales.sql
delete mode 100644 mall/pages/mall/analytics/test/03_ml_analytics_rpcs_dashboard.sql
delete mode 100644 mall/pages/mall/analytics/test/04_ml_analytics_rpcs_market_trends.sql
delete mode 100644 mall/pages/mall/analytics/test/05_ml_analytics_rpcs_product.sql
delete mode 100644 mall/pages/mall/analytics/test/06_ml_analytics_rpcs_coupon.sql
delete mode 100644 mall/pages/mall/analytics/test/07_ml_analytics_rpcs_delivery.sql
delete mode 100644 mall/pages/mall/analytics/test/08_ml_analytics_rpcs_custom_report.sql
delete mode 100644 mall/pages/mall/analytics/test/08_ml_analytics_rpcs_data_detail.sql
delete mode 100644 mall/pages/mall/analytics/test/09_ml_analytics_rpcs_data_detail.sql
delete mode 100644 mall/pages/mall/analytics/test/99_ml_analytics_verify.sql
delete mode 100644 mall/pages/mall/analytics/user-analysis.uvue
delete mode 100644 mall/pages/mall/consumer/address-edit.uvue
delete mode 100644 mall/pages/mall/consumer/address-list copy.uvue
delete mode 100644 mall/pages/mall/consumer/address-list.uvue
delete mode 100644 mall/pages/mall/consumer/address.uvue
delete mode 100644 mall/pages/mall/consumer/apply-refund.uvue
delete mode 100644 mall/pages/mall/consumer/cart.uvue
delete mode 100644 mall/pages/mall/consumer/cart药品.uvue
delete mode 100644 mall/pages/mall/consumer/category.uvue
delete mode 100644 mall/pages/mall/consumer/category药品.uvue
delete mode 100644 mall/pages/mall/consumer/chat.uvue
delete mode 100644 mall/pages/mall/consumer/checkout.uvue
delete mode 100644 mall/pages/mall/consumer/coupons.uvue
delete mode 100644 mall/pages/mall/consumer/doc/FEATURES_&_PAGES.md
delete mode 100644 mall/pages/mall/consumer/doc/MOCK_DATA_GUIDE.md
delete mode 100644 mall/pages/mall/consumer/doc/README.md
delete mode 100644 mall/pages/mall/consumer/doc/SUPABASE_INTEGRATION.md
delete mode 100644 mall/pages/mall/consumer/favorites.uvue
delete mode 100644 mall/pages/mall/consumer/footprint.uvue
delete mode 100644 mall/pages/mall/consumer/index.uvue
delete mode 100644 mall/pages/mall/consumer/index医药.uvue
delete mode 100644 mall/pages/mall/consumer/logistics.uvue
delete mode 100644 mall/pages/mall/consumer/messages.uvue
delete mode 100644 mall/pages/mall/consumer/messages医药.uvue
delete mode 100644 mall/pages/mall/consumer/order-detail.uvue
delete mode 100644 mall/pages/mall/consumer/orders.uvue
delete mode 100644 mall/pages/mall/consumer/payment-success.uvue
delete mode 100644 mall/pages/mall/consumer/payment.uvue
delete mode 100644 mall/pages/mall/consumer/product-detail.uvue
delete mode 100644 mall/pages/mall/consumer/profile.uvue
delete mode 100644 mall/pages/mall/consumer/refund-review.uvue
delete mode 100644 mall/pages/mall/consumer/refund.uvue
delete mode 100644 mall/pages/mall/consumer/review.uvue
delete mode 100644 mall/pages/mall/consumer/search.uvue
delete mode 100644 mall/pages/mall/consumer/settings.uvue
delete mode 100644 mall/pages/mall/consumer/shop-detail.uvue
delete mode 100644 mall/pages/mall/consumer/sql/SUPABASE_CONSUMER_INTEGRATION.md
delete mode 100644 mall/pages/mall/consumer/sql/insert_shop_products.sql
delete mode 100644 mall/pages/mall/consumer/subscription/README.md
delete mode 100644 mall/pages/mall/consumer/subscription/my-subscriptions.uvue
delete mode 100644 mall/pages/mall/consumer/subscription/plan-detail.uvue
delete mode 100644 mall/pages/mall/consumer/subscription/plan-list.uvue
delete mode 100644 mall/pages/mall/consumer/subscription/subscribe-checkout.uvue
delete mode 100644 mall/pages/mall/consumer/wallet - 副本.uvue
delete mode 100644 mall/pages/mall/consumer/wallet.uvue
delete mode 100644 mall/pages/mall/consumer/wallett.uvue
delete mode 100644 mall/pages/mall/delivery/about.uvue
delete mode 100644 mall/pages/mall/delivery/delivery.md
delete mode 100644 mall/pages/mall/delivery/doc/db-data-generation.md
delete mode 100644 mall/pages/mall/delivery/doc/delivery.md
delete mode 100644 mall/pages/mall/delivery/doc/earnings.md
delete mode 100644 mall/pages/mall/delivery/doc/index.md
delete mode 100644 mall/pages/mall/delivery/doc/more-orders.md
delete mode 100644 mall/pages/mall/delivery/doc/order-detail.md
delete mode 100644 mall/pages/mall/delivery/doc/order-history.md
delete mode 100644 mall/pages/mall/delivery/doc/profile-edit.md
delete mode 100644 mall/pages/mall/delivery/doc/profile.md
delete mode 100644 mall/pages/mall/delivery/earnings.uvue
delete mode 100644 mall/pages/mall/delivery/feedback.uvue
delete mode 100644 mall/pages/mall/delivery/help-center.uvue
delete mode 100644 mall/pages/mall/delivery/index.uvue
delete mode 100644 mall/pages/mall/delivery/order-detail.uvue
delete mode 100644 mall/pages/mall/delivery/order-history.uvue
delete mode 100644 mall/pages/mall/delivery/profile-edit.uvue
delete mode 100644 mall/pages/mall/delivery/profile.uvue
delete mode 100644 mall/pages/mall/delivery/ratings.uvue
delete mode 100644 mall/pages/mall/delivery/settings.uvue
delete mode 100644 mall/pages/mall/delivery/task-detail.uvue
delete mode 100644 mall/pages/mall/delivery/tasks.uvue
delete mode 100644 mall/pages/mall/delivery/test.uvue
delete mode 100644 mall/pages/mall/delivery/vehicle-add.uvue
delete mode 100644 mall/pages/mall/delivery/vehicle-edit.uvue
delete mode 100644 mall/pages/mall/delivery/vehicle.uvue
delete mode 100644 mall/pages/mall/mall.md
delete mode 100644 mall/pages/mall/merchant/index.uvue
delete mode 100644 mall/pages/mall/merchant/product-detail.uvue
delete mode 100644 mall/pages/mall/merchant/profile.uvue
delete mode 100644 mall/pages/mall/nfc/admin/index.uvue
delete mode 100644 mall/pages/mall/nfc/librarian/index.uvue
delete mode 100644 mall/pages/mall/nfc/merchant/pos-cashier.uvue
delete mode 100644 mall/pages/mall/nfc/nfc-modules-guide.md
delete mode 100644 mall/pages/mall/nfc/nfc.md
delete mode 100644 mall/pages/mall/nfc/pages-admin.json
delete mode 100644 mall/pages/mall/nfc/pages-librarian.json
delete mode 100644 mall/pages/mall/nfc/pages-merchant.json
delete mode 100644 mall/pages/mall/nfc/pages-parent.json
delete mode 100644 mall/pages/mall/nfc/pages-security.json
delete mode 100644 mall/pages/mall/nfc/pages-student.json
delete mode 100644 mall/pages/mall/nfc/pages-teacher.json
delete mode 100644 mall/pages/mall/nfc/parent/index.uvue
delete mode 100644 mall/pages/mall/nfc/security/index.uvue
delete mode 100644 mall/pages/mall/nfc/student/index.uvue
delete mode 100644 mall/pages/mall/nfc/student/nfc-pay.uvue
delete mode 100644 mall/pages/mall/nfc/teacher/index.uvue
delete mode 100644 mall/pages/mall/pages.json
delete mode 100644 mall/pages/mall/service/index.uvue
delete mode 100644 mall/pages/mall/service/profile.uvue
delete mode 100644 mall/pages/mall/service/ticket-detail.uvue
delete mode 100644 mall/pages/minimal.uvue
delete mode 100644 mall/pages/sense/senseDataService.uts
delete mode 100644 mall/pages/sense/types.uts
delete mode 100644 mall/pages/test-minimal.uvue
delete mode 100644 mall/pages/user/bind-email.uvue
delete mode 100644 mall/pages/user/bind-phone.uvue
delete mode 100644 mall/pages/user/boot.uvue
delete mode 100644 mall/pages/user/center.uvue
delete mode 100644 mall/pages/user/change-password.uvue
delete mode 100644 mall/pages/user/forgot-password.uvue
delete mode 100644 mall/pages/user/login.uvue
delete mode 100644 mall/pages/user/loginn.uvue
delete mode 100644 mall/pages/user/profile.uvue
delete mode 100644 mall/pages/user/register.uvue
delete mode 100644 mall/pages/user/terms.uvue
delete mode 100644 mall/pages/user/test/CONFIG_CHANGED.md
delete mode 100644 mall/pages/user/test/DEBUG_SIGNUP.md
delete mode 100644 mall/pages/user/test/EMAIL_CONFIG_FIX.md
delete mode 100644 mall/pages/user/test/IMMEDIATE_FIX.md
delete mode 100644 mall/pages/user/test/QUICK_FIX.md
delete mode 100644 mall/pages/user/test/QUICK_FIX_SIGNUP_LOGIN.md
delete mode 100644 mall/pages/user/test/README.md
delete mode 100644 mall/pages/user/test/USER_AUTH_SCHEMA.sql
delete mode 100644 mall/pages/user/test/USER_AUTH_TEST_DATA.sql
delete mode 100644 mall/pages/user/test/USER_AUTH_TRIGGER.sql
delete mode 100644 mall/pages/user/types.uts
delete mode 100644 mall/pages_default_temp.json
delete mode 100644 mall/pages_utf8_temp.json
delete mode 100644 mall/platformConfig.json
delete mode 100644 mall/refactor-script.ps1
delete mode 100644 mall/services/analytics/auth.uts
delete mode 100644 mall/services/analytics/authGuard.uts
delete mode 100644 mall/services/analytics/couponAnalysisService.uts
delete mode 100644 mall/services/analytics/customReportService.uts
delete mode 100644 mall/services/analytics/dashboardService.uts
delete mode 100644 mall/services/analytics/dataDetailService.uts
delete mode 100644 mall/services/analytics/dateRange.uts
delete mode 100644 mall/services/analytics/deliveryAnalysisService.uts
delete mode 100644 mall/services/analytics/errorMapper.uts
delete mode 100644 mall/services/analytics/insightDetailService.uts
delete mode 100644 mall/services/analytics/marketTrendsService.uts
delete mode 100644 mall/services/analytics/productInsightsService.uts
delete mode 100644 mall/services/analytics/reportDetailService.uts
delete mode 100644 mall/services/analytics/rpc.uts
delete mode 100644 mall/services/analytics/salesReportService.uts
delete mode 100644 mall/services/analytics/userAnalysisService.uts
delete mode 100644 mall/static/content.svg
delete mode 100644 mall/static/customerService.svg
delete mode 100644 mall/static/design.svg
delete mode 100644 mall/static/finance.svg
delete mode 100644 mall/static/homepage.svg
delete mode 100644 mall/static/image/tab-chat-active.png
delete mode 100644 mall/static/image/tab-chat.png
delete mode 100644 mall/static/image/tab-dashboard-active.png
delete mode 100644 mall/static/image/tab-dashboard.png
delete mode 100644 mall/static/image/tab-device-active.png
delete mode 100644 mall/static/image/tab-device.png
delete mode 100644 mall/static/image/tab-location-active.png
delete mode 100644 mall/static/image/tab-location.png
delete mode 100644 mall/static/image/tab-training-active.png
delete mode 100644 mall/static/image/tab-training.png
delete mode 100644 mall/static/image/tab-user-active.png
delete mode 100644 mall/static/image/tab-user.png
delete mode 100644 mall/static/images/default-banner.png
delete mode 100644 mall/static/images/default-product.png
delete mode 100644 mall/static/logo.png
delete mode 100644 mall/static/maintain.svg
delete mode 100644 mall/static/marketing.svg
delete mode 100644 mall/static/order.svg
delete mode 100644 mall/static/product.svg
delete mode 100644 mall/static/setting.svg
delete mode 100644 mall/static/user.svg
delete mode 100644 mall/static/user/COPY_IMAGES.md
delete mode 100644 mall/static/user/README.md
delete mode 100644 mall/tsconfig.json
delete mode 100644 mall/types/analytics.uts
delete mode 100644 mall/types/analytics/common.uts
delete mode 100644 mall/types/analytics/coupon.uts
delete mode 100644 mall/types/analytics/custom-report.uts
delete mode 100644 mall/types/analytics/dashboard.uts
delete mode 100644 mall/types/analytics/data-detail.uts
delete mode 100644 mall/types/analytics/delivery.uts
delete mode 100644 mall/types/analytics/insight.uts
delete mode 100644 mall/types/analytics/market.uts
delete mode 100644 mall/types/analytics/product.uts
delete mode 100644 mall/types/analytics/profile.uts
delete mode 100644 mall/types/analytics/report-detail.uts
delete mode 100644 mall/types/analytics/sales.uts
delete mode 100644 mall/types/analytics/user.uts
delete mode 100644 mall/types/charts.uts
delete mode 100644 mall/types/mall-types - 副本.uts
delete mode 100644 mall/types/mall-types.uts
delete mode 100644 mall/types/orders.uts
delete mode 100644 mall/uni.scss
delete mode 100644 mall/uni_modules/ak-req/ak-req.uts
delete mode 100644 mall/uni_modules/ak-req/index.uts
delete mode 100644 mall/uni_modules/ak-req/interface.uts
delete mode 100644 mall/uni_modules/ak-req/package.json
delete mode 100644 mall/uni_modules/charts/EChartsView.vue
delete mode 100644 mall/uni_modules/i18n/README.md
delete mode 100644 mall/uni_modules/i18n/index.uts
delete mode 100644 mall/uni_modules/i18n/package.json
delete mode 100644 mall/uni_modules/lime-clipboard/changelog.md
delete mode 100644 mall/uni_modules/lime-clipboard/components/lime-clipboard/lime-clipboard.uvue
delete mode 100644 mall/uni_modules/lime-clipboard/package.json
delete mode 100644 mall/uni_modules/lime-clipboard/readme.md
delete mode 100644 mall/uni_modules/lime-clipboard/utssdk/app-android/AndroidManifest.xml
delete mode 100644 mall/uni_modules/lime-clipboard/utssdk/app-android/config.json
delete mode 100644 mall/uni_modules/lime-clipboard/utssdk/app-android/index.uts
delete mode 100644 mall/uni_modules/lime-clipboard/utssdk/app-ios/config.json
delete mode 100644 mall/uni_modules/lime-clipboard/utssdk/app-ios/index.uts
delete mode 100644 mall/uni_modules/lime-clipboard/utssdk/index.uts
delete mode 100644 mall/uni_modules/lime-clipboard/utssdk/interface.uts
delete mode 100644 mall/uni_modules/lime-clipboard/utssdk/unierror.uts
delete mode 100644 mall/uni_modules/rag-req/interface.uts
delete mode 100644 mall/uni_modules/rag-req/rag-req.uts
delete mode 100644 mall/unpackage/cache/.app-android/tsc/app-android/.tsbuildInfo
delete mode 100644 mall/utils/authRedirect.uts
delete mode 100644 mall/utils/i18nfun.uts
delete mode 100644 mall/utils/mock-category-data.uts
delete mode 100644 mall/utils/sapi.uts
delete mode 100644 mall/utils/store.uts
delete mode 100644 mall/utils/supabaseService.uts
delete mode 100644 mall/utils/utils.uts
rename {mall/pages => pages}/mall/consumer/bank-cards/add.uvue (100%)
rename {mall/pages => pages}/mall/consumer/bank-cards/index.uvue (100%)
rename {mall/pages => pages}/mall/consumer/chat_new.uvue (100%)
rename {mall/pages => pages}/mall/consumer/doc/CHAT_SHOPPING_SUPABASE_ARCH.md (100%)
create mode 100644 pages/mall/consumer/doc/CONSUMER_DB_DOC.md
rename {mall/pages => pages}/mall/consumer/points/index.uvue (100%)
rename {mall/pages => pages}/mall/consumer/red-packets/index.uvue (100%)
create mode 100644 pages/mall/consumer/subscription/followed-shops.uvue
rename {mall/pages => pages}/mall/consumer/withdraw.uvue (100%)
create mode 100644 sql/create_shop_follows.sql
create mode 100644 sql/fix_chat_rls.sql
create mode 100644 sql/fix_shop_product_counts.sql
create mode 100644 sql/fix_shop_visibility.sql
create mode 100644 sql/seed_test2_products.sql
diff --git a/mall/.git_disabled/COMMIT_EDITMSG b/.git_disabled/COMMIT_EDITMSG
similarity index 100%
rename from mall/.git_disabled/COMMIT_EDITMSG
rename to .git_disabled/COMMIT_EDITMSG
diff --git a/mall/.git_disabled/FETCH_HEAD b/.git_disabled/FETCH_HEAD
similarity index 100%
rename from mall/.git_disabled/FETCH_HEAD
rename to .git_disabled/FETCH_HEAD
diff --git a/mall/.git_disabled/HEAD b/.git_disabled/HEAD
similarity index 100%
rename from mall/.git_disabled/HEAD
rename to .git_disabled/HEAD
diff --git a/mall/.git_disabled/ORIG_HEAD b/.git_disabled/ORIG_HEAD
similarity index 100%
rename from mall/.git_disabled/ORIG_HEAD
rename to .git_disabled/ORIG_HEAD
diff --git a/mall/.git_disabled/config b/.git_disabled/config
similarity index 100%
rename from mall/.git_disabled/config
rename to .git_disabled/config
diff --git a/mall/.git_disabled/description b/.git_disabled/description
similarity index 100%
rename from mall/.git_disabled/description
rename to .git_disabled/description
diff --git a/mall/.git_disabled/hooks/applypatch-msg.sample b/.git_disabled/hooks/applypatch-msg.sample
similarity index 100%
rename from mall/.git_disabled/hooks/applypatch-msg.sample
rename to .git_disabled/hooks/applypatch-msg.sample
diff --git a/mall/.git_disabled/hooks/commit-msg.sample b/.git_disabled/hooks/commit-msg.sample
similarity index 100%
rename from mall/.git_disabled/hooks/commit-msg.sample
rename to .git_disabled/hooks/commit-msg.sample
diff --git a/mall/.git_disabled/hooks/fsmonitor-watchman.sample b/.git_disabled/hooks/fsmonitor-watchman.sample
similarity index 100%
rename from mall/.git_disabled/hooks/fsmonitor-watchman.sample
rename to .git_disabled/hooks/fsmonitor-watchman.sample
diff --git a/mall/.git_disabled/hooks/post-update.sample b/.git_disabled/hooks/post-update.sample
similarity index 100%
rename from mall/.git_disabled/hooks/post-update.sample
rename to .git_disabled/hooks/post-update.sample
diff --git a/mall/.git_disabled/hooks/pre-applypatch.sample b/.git_disabled/hooks/pre-applypatch.sample
similarity index 100%
rename from mall/.git_disabled/hooks/pre-applypatch.sample
rename to .git_disabled/hooks/pre-applypatch.sample
diff --git a/mall/.git_disabled/hooks/pre-commit.sample b/.git_disabled/hooks/pre-commit.sample
similarity index 100%
rename from mall/.git_disabled/hooks/pre-commit.sample
rename to .git_disabled/hooks/pre-commit.sample
diff --git a/mall/.git_disabled/hooks/pre-merge-commit.sample b/.git_disabled/hooks/pre-merge-commit.sample
similarity index 100%
rename from mall/.git_disabled/hooks/pre-merge-commit.sample
rename to .git_disabled/hooks/pre-merge-commit.sample
diff --git a/mall/.git_disabled/hooks/pre-push.sample b/.git_disabled/hooks/pre-push.sample
similarity index 100%
rename from mall/.git_disabled/hooks/pre-push.sample
rename to .git_disabled/hooks/pre-push.sample
diff --git a/mall/.git_disabled/hooks/pre-rebase.sample b/.git_disabled/hooks/pre-rebase.sample
similarity index 100%
rename from mall/.git_disabled/hooks/pre-rebase.sample
rename to .git_disabled/hooks/pre-rebase.sample
diff --git a/mall/.git_disabled/hooks/pre-receive.sample b/.git_disabled/hooks/pre-receive.sample
similarity index 100%
rename from mall/.git_disabled/hooks/pre-receive.sample
rename to .git_disabled/hooks/pre-receive.sample
diff --git a/mall/.git_disabled/hooks/prepare-commit-msg.sample b/.git_disabled/hooks/prepare-commit-msg.sample
similarity index 100%
rename from mall/.git_disabled/hooks/prepare-commit-msg.sample
rename to .git_disabled/hooks/prepare-commit-msg.sample
diff --git a/mall/.git_disabled/hooks/push-to-checkout.sample b/.git_disabled/hooks/push-to-checkout.sample
similarity index 100%
rename from mall/.git_disabled/hooks/push-to-checkout.sample
rename to .git_disabled/hooks/push-to-checkout.sample
diff --git a/mall/.git_disabled/hooks/sendemail-validate.sample b/.git_disabled/hooks/sendemail-validate.sample
similarity index 100%
rename from mall/.git_disabled/hooks/sendemail-validate.sample
rename to .git_disabled/hooks/sendemail-validate.sample
diff --git a/mall/.git_disabled/hooks/update.sample b/.git_disabled/hooks/update.sample
similarity index 100%
rename from mall/.git_disabled/hooks/update.sample
rename to .git_disabled/hooks/update.sample
diff --git a/mall/.git_disabled/index b/.git_disabled/index
similarity index 100%
rename from mall/.git_disabled/index
rename to .git_disabled/index
diff --git a/mall/.git_disabled/info/exclude b/.git_disabled/info/exclude
similarity index 100%
rename from mall/.git_disabled/info/exclude
rename to .git_disabled/info/exclude
diff --git a/mall/.git_disabled/logs/HEAD b/.git_disabled/logs/HEAD
similarity index 100%
rename from mall/.git_disabled/logs/HEAD
rename to .git_disabled/logs/HEAD
diff --git a/mall/.git_disabled/logs/refs/heads/cyh666666/consumer b/.git_disabled/logs/refs/heads/cyh666666/consumer
similarity index 100%
rename from mall/.git_disabled/logs/refs/heads/cyh666666/consumer
rename to .git_disabled/logs/refs/heads/cyh666666/consumer
diff --git a/mall/.git_disabled/logs/refs/heads/main b/.git_disabled/logs/refs/heads/main
similarity index 100%
rename from mall/.git_disabled/logs/refs/heads/main
rename to .git_disabled/logs/refs/heads/main
diff --git a/mall/.git_disabled/logs/refs/remotes/origin/HEAD b/.git_disabled/logs/refs/remotes/origin/HEAD
similarity index 100%
rename from mall/.git_disabled/logs/refs/remotes/origin/HEAD
rename to .git_disabled/logs/refs/remotes/origin/HEAD
diff --git a/mall/.git_disabled/logs/refs/remotes/origin/comclib-analytics b/.git_disabled/logs/refs/remotes/origin/comclib-analytics
similarity index 100%
rename from mall/.git_disabled/logs/refs/remotes/origin/comclib-analytics
rename to .git_disabled/logs/refs/remotes/origin/comclib-analytics
diff --git a/mall/.git_disabled/logs/refs/remotes/origin/cyh666666/consumer b/.git_disabled/logs/refs/remotes/origin/cyh666666/consumer
similarity index 100%
rename from mall/.git_disabled/logs/refs/remotes/origin/cyh666666/consumer
rename to .git_disabled/logs/refs/remotes/origin/cyh666666/consumer
diff --git a/mall/.git_disabled/logs/refs/remotes/origin/huangzhenbao-admin b/.git_disabled/logs/refs/remotes/origin/huangzhenbao-admin
similarity index 100%
rename from mall/.git_disabled/logs/refs/remotes/origin/huangzhenbao-admin
rename to .git_disabled/logs/refs/remotes/origin/huangzhenbao-admin
diff --git a/mall/.git_disabled/logs/refs/remotes/origin/main b/.git_disabled/logs/refs/remotes/origin/main
similarity index 100%
rename from mall/.git_disabled/logs/refs/remotes/origin/main
rename to .git_disabled/logs/refs/remotes/origin/main
diff --git a/mall/.git_disabled/logs/refs/remotes/origin/ysj-delivery b/.git_disabled/logs/refs/remotes/origin/ysj-delivery
similarity index 100%
rename from mall/.git_disabled/logs/refs/remotes/origin/ysj-delivery
rename to .git_disabled/logs/refs/remotes/origin/ysj-delivery
diff --git a/mall/.git_disabled/objects/00/8b5c090b3c9236fa59321f68f2ffa2469a747e b/.git_disabled/objects/00/8b5c090b3c9236fa59321f68f2ffa2469a747e
similarity index 100%
rename from mall/.git_disabled/objects/00/8b5c090b3c9236fa59321f68f2ffa2469a747e
rename to .git_disabled/objects/00/8b5c090b3c9236fa59321f68f2ffa2469a747e
diff --git a/mall/.git_disabled/objects/01/694319e412029ecccf3ab86f71808167b49b70 b/.git_disabled/objects/01/694319e412029ecccf3ab86f71808167b49b70
similarity index 100%
rename from mall/.git_disabled/objects/01/694319e412029ecccf3ab86f71808167b49b70
rename to .git_disabled/objects/01/694319e412029ecccf3ab86f71808167b49b70
diff --git a/mall/.git_disabled/objects/03/2b689e3077670c856cfdcc73fa698bfc7af990 b/.git_disabled/objects/03/2b689e3077670c856cfdcc73fa698bfc7af990
similarity index 100%
rename from mall/.git_disabled/objects/03/2b689e3077670c856cfdcc73fa698bfc7af990
rename to .git_disabled/objects/03/2b689e3077670c856cfdcc73fa698bfc7af990
diff --git a/mall/.git_disabled/objects/03/69a8c5c0d731a7a649e4d3a2bf9639a3a5b727 b/.git_disabled/objects/03/69a8c5c0d731a7a649e4d3a2bf9639a3a5b727
similarity index 100%
rename from mall/.git_disabled/objects/03/69a8c5c0d731a7a649e4d3a2bf9639a3a5b727
rename to .git_disabled/objects/03/69a8c5c0d731a7a649e4d3a2bf9639a3a5b727
diff --git a/mall/.git_disabled/objects/03/6b8a113d4d3b907a1329dcd0db811235fef113 b/.git_disabled/objects/03/6b8a113d4d3b907a1329dcd0db811235fef113
similarity index 100%
rename from mall/.git_disabled/objects/03/6b8a113d4d3b907a1329dcd0db811235fef113
rename to .git_disabled/objects/03/6b8a113d4d3b907a1329dcd0db811235fef113
diff --git a/mall/.git_disabled/objects/04/ad80bc32d65dd9c0abb88c79ca268a8538a2a9 b/.git_disabled/objects/04/ad80bc32d65dd9c0abb88c79ca268a8538a2a9
similarity index 100%
rename from mall/.git_disabled/objects/04/ad80bc32d65dd9c0abb88c79ca268a8538a2a9
rename to .git_disabled/objects/04/ad80bc32d65dd9c0abb88c79ca268a8538a2a9
diff --git a/mall/.git_disabled/objects/04/fc7bc90aefa3c43c95e8ad9e38e2a354c5bc39 b/.git_disabled/objects/04/fc7bc90aefa3c43c95e8ad9e38e2a354c5bc39
similarity index 100%
rename from mall/.git_disabled/objects/04/fc7bc90aefa3c43c95e8ad9e38e2a354c5bc39
rename to .git_disabled/objects/04/fc7bc90aefa3c43c95e8ad9e38e2a354c5bc39
diff --git a/mall/.git_disabled/objects/05/da5deeacf59c3e86b862d6b5f4162654f31088 b/.git_disabled/objects/05/da5deeacf59c3e86b862d6b5f4162654f31088
similarity index 100%
rename from mall/.git_disabled/objects/05/da5deeacf59c3e86b862d6b5f4162654f31088
rename to .git_disabled/objects/05/da5deeacf59c3e86b862d6b5f4162654f31088
diff --git a/mall/.git_disabled/objects/06/764b6a617f56c94a8be328f3e4c1edf635cfb9 b/.git_disabled/objects/06/764b6a617f56c94a8be328f3e4c1edf635cfb9
similarity index 100%
rename from mall/.git_disabled/objects/06/764b6a617f56c94a8be328f3e4c1edf635cfb9
rename to .git_disabled/objects/06/764b6a617f56c94a8be328f3e4c1edf635cfb9
diff --git a/mall/.git_disabled/objects/06/e381d6f01912f7a34ca8ae6673db2b0f909fa6 b/.git_disabled/objects/06/e381d6f01912f7a34ca8ae6673db2b0f909fa6
similarity index 100%
rename from mall/.git_disabled/objects/06/e381d6f01912f7a34ca8ae6673db2b0f909fa6
rename to .git_disabled/objects/06/e381d6f01912f7a34ca8ae6673db2b0f909fa6
diff --git a/mall/.git_disabled/objects/07/10effd5f2d8f8b8ce35e1a915ee3eb268a541f b/.git_disabled/objects/07/10effd5f2d8f8b8ce35e1a915ee3eb268a541f
similarity index 100%
rename from mall/.git_disabled/objects/07/10effd5f2d8f8b8ce35e1a915ee3eb268a541f
rename to .git_disabled/objects/07/10effd5f2d8f8b8ce35e1a915ee3eb268a541f
diff --git a/mall/.git_disabled/objects/07/f2452494909d431aa9bb5ef2a12dff9ea410f9 b/.git_disabled/objects/07/f2452494909d431aa9bb5ef2a12dff9ea410f9
similarity index 100%
rename from mall/.git_disabled/objects/07/f2452494909d431aa9bb5ef2a12dff9ea410f9
rename to .git_disabled/objects/07/f2452494909d431aa9bb5ef2a12dff9ea410f9
diff --git a/mall/.git_disabled/objects/09/c33be3944cd0928c4d4300b5091c480e1e6ce4 b/.git_disabled/objects/09/c33be3944cd0928c4d4300b5091c480e1e6ce4
similarity index 100%
rename from mall/.git_disabled/objects/09/c33be3944cd0928c4d4300b5091c480e1e6ce4
rename to .git_disabled/objects/09/c33be3944cd0928c4d4300b5091c480e1e6ce4
diff --git a/mall/.git_disabled/objects/0a/0686686da2d07a9193029565c212429bf4d4d9 b/.git_disabled/objects/0a/0686686da2d07a9193029565c212429bf4d4d9
similarity index 100%
rename from mall/.git_disabled/objects/0a/0686686da2d07a9193029565c212429bf4d4d9
rename to .git_disabled/objects/0a/0686686da2d07a9193029565c212429bf4d4d9
diff --git a/mall/.git_disabled/objects/0a/71faa46489ab0b2cddb585ef9e2d98ed2e8f7a b/.git_disabled/objects/0a/71faa46489ab0b2cddb585ef9e2d98ed2e8f7a
similarity index 100%
rename from mall/.git_disabled/objects/0a/71faa46489ab0b2cddb585ef9e2d98ed2e8f7a
rename to .git_disabled/objects/0a/71faa46489ab0b2cddb585ef9e2d98ed2e8f7a
diff --git a/mall/.git_disabled/objects/0a/8ee8803328745670d6192f19f6e150f4df5686 b/.git_disabled/objects/0a/8ee8803328745670d6192f19f6e150f4df5686
similarity index 100%
rename from mall/.git_disabled/objects/0a/8ee8803328745670d6192f19f6e150f4df5686
rename to .git_disabled/objects/0a/8ee8803328745670d6192f19f6e150f4df5686
diff --git a/mall/.git_disabled/objects/0a/b769f1d2f8bd8a6995c61e83311835940803ed b/.git_disabled/objects/0a/b769f1d2f8bd8a6995c61e83311835940803ed
similarity index 100%
rename from mall/.git_disabled/objects/0a/b769f1d2f8bd8a6995c61e83311835940803ed
rename to .git_disabled/objects/0a/b769f1d2f8bd8a6995c61e83311835940803ed
diff --git a/mall/.git_disabled/objects/0b/f13ee5f510c7025881c9f211cfb70eaa45a84a b/.git_disabled/objects/0b/f13ee5f510c7025881c9f211cfb70eaa45a84a
similarity index 100%
rename from mall/.git_disabled/objects/0b/f13ee5f510c7025881c9f211cfb70eaa45a84a
rename to .git_disabled/objects/0b/f13ee5f510c7025881c9f211cfb70eaa45a84a
diff --git a/mall/.git_disabled/objects/0c/687186d417a4e3631805004b5133cab99c8126 b/.git_disabled/objects/0c/687186d417a4e3631805004b5133cab99c8126
similarity index 100%
rename from mall/.git_disabled/objects/0c/687186d417a4e3631805004b5133cab99c8126
rename to .git_disabled/objects/0c/687186d417a4e3631805004b5133cab99c8126
diff --git a/mall/.git_disabled/objects/0c/725c32404e9d25006c55809b6bcc0406e6485b b/.git_disabled/objects/0c/725c32404e9d25006c55809b6bcc0406e6485b
similarity index 100%
rename from mall/.git_disabled/objects/0c/725c32404e9d25006c55809b6bcc0406e6485b
rename to .git_disabled/objects/0c/725c32404e9d25006c55809b6bcc0406e6485b
diff --git a/mall/.git_disabled/objects/0c/956c6b50c1b8178b884bd9be07d423b813cc6a b/.git_disabled/objects/0c/956c6b50c1b8178b884bd9be07d423b813cc6a
similarity index 100%
rename from mall/.git_disabled/objects/0c/956c6b50c1b8178b884bd9be07d423b813cc6a
rename to .git_disabled/objects/0c/956c6b50c1b8178b884bd9be07d423b813cc6a
diff --git a/mall/.git_disabled/objects/0c/aafefe247b87090638a4ab1b4a3882a6bf24b6 b/.git_disabled/objects/0c/aafefe247b87090638a4ab1b4a3882a6bf24b6
similarity index 100%
rename from mall/.git_disabled/objects/0c/aafefe247b87090638a4ab1b4a3882a6bf24b6
rename to .git_disabled/objects/0c/aafefe247b87090638a4ab1b4a3882a6bf24b6
diff --git a/mall/.git_disabled/objects/0c/b8ccf6ad4a4cfefc40afd2a268d978bd9002e4 b/.git_disabled/objects/0c/b8ccf6ad4a4cfefc40afd2a268d978bd9002e4
similarity index 100%
rename from mall/.git_disabled/objects/0c/b8ccf6ad4a4cfefc40afd2a268d978bd9002e4
rename to .git_disabled/objects/0c/b8ccf6ad4a4cfefc40afd2a268d978bd9002e4
diff --git a/mall/.git_disabled/objects/0d/1bf091bf60a9a62d444786fcce1e23fc854d25 b/.git_disabled/objects/0d/1bf091bf60a9a62d444786fcce1e23fc854d25
similarity index 100%
rename from mall/.git_disabled/objects/0d/1bf091bf60a9a62d444786fcce1e23fc854d25
rename to .git_disabled/objects/0d/1bf091bf60a9a62d444786fcce1e23fc854d25
diff --git a/mall/.git_disabled/objects/0d/5f1be5fdcd3673ee1a40c081403af1baf96f84 b/.git_disabled/objects/0d/5f1be5fdcd3673ee1a40c081403af1baf96f84
similarity index 100%
rename from mall/.git_disabled/objects/0d/5f1be5fdcd3673ee1a40c081403af1baf96f84
rename to .git_disabled/objects/0d/5f1be5fdcd3673ee1a40c081403af1baf96f84
diff --git a/mall/.git_disabled/objects/0e/d62a82583382449a860a0d5bd7517a93c88dc9 b/.git_disabled/objects/0e/d62a82583382449a860a0d5bd7517a93c88dc9
similarity index 100%
rename from mall/.git_disabled/objects/0e/d62a82583382449a860a0d5bd7517a93c88dc9
rename to .git_disabled/objects/0e/d62a82583382449a860a0d5bd7517a93c88dc9
diff --git a/mall/.git_disabled/objects/0f/9cc197b0b07feb5908da3cee31b14636f51c9d b/.git_disabled/objects/0f/9cc197b0b07feb5908da3cee31b14636f51c9d
similarity index 100%
rename from mall/.git_disabled/objects/0f/9cc197b0b07feb5908da3cee31b14636f51c9d
rename to .git_disabled/objects/0f/9cc197b0b07feb5908da3cee31b14636f51c9d
diff --git a/mall/.git_disabled/objects/0f/d1cd5c57fa435a479620dd5131959324ef33a5 b/.git_disabled/objects/0f/d1cd5c57fa435a479620dd5131959324ef33a5
similarity index 100%
rename from mall/.git_disabled/objects/0f/d1cd5c57fa435a479620dd5131959324ef33a5
rename to .git_disabled/objects/0f/d1cd5c57fa435a479620dd5131959324ef33a5
diff --git a/mall/.git_disabled/objects/10/49c5b251d938bfbb0e29b5346aa828ea492481 b/.git_disabled/objects/10/49c5b251d938bfbb0e29b5346aa828ea492481
similarity index 100%
rename from mall/.git_disabled/objects/10/49c5b251d938bfbb0e29b5346aa828ea492481
rename to .git_disabled/objects/10/49c5b251d938bfbb0e29b5346aa828ea492481
diff --git a/mall/.git_disabled/objects/12/1595995e61cea28e24041dc7c10679a3eaeb7f b/.git_disabled/objects/12/1595995e61cea28e24041dc7c10679a3eaeb7f
similarity index 100%
rename from mall/.git_disabled/objects/12/1595995e61cea28e24041dc7c10679a3eaeb7f
rename to .git_disabled/objects/12/1595995e61cea28e24041dc7c10679a3eaeb7f
diff --git a/mall/.git_disabled/objects/12/172425d59adec075f823584af9c70b03dd8c70 b/.git_disabled/objects/12/172425d59adec075f823584af9c70b03dd8c70
similarity index 100%
rename from mall/.git_disabled/objects/12/172425d59adec075f823584af9c70b03dd8c70
rename to .git_disabled/objects/12/172425d59adec075f823584af9c70b03dd8c70
diff --git a/mall/.git_disabled/objects/12/41580f5a05d6166995a04e78f13fd94feaf728 b/.git_disabled/objects/12/41580f5a05d6166995a04e78f13fd94feaf728
similarity index 100%
rename from mall/.git_disabled/objects/12/41580f5a05d6166995a04e78f13fd94feaf728
rename to .git_disabled/objects/12/41580f5a05d6166995a04e78f13fd94feaf728
diff --git a/mall/.git_disabled/objects/13/4f83615db32b2f2faed54678e24a7ac4ed8733 b/.git_disabled/objects/13/4f83615db32b2f2faed54678e24a7ac4ed8733
similarity index 100%
rename from mall/.git_disabled/objects/13/4f83615db32b2f2faed54678e24a7ac4ed8733
rename to .git_disabled/objects/13/4f83615db32b2f2faed54678e24a7ac4ed8733
diff --git a/mall/.git_disabled/objects/13/fe09a27e5ae9dfb3acba8c0b6c863ef1d1b27c b/.git_disabled/objects/13/fe09a27e5ae9dfb3acba8c0b6c863ef1d1b27c
similarity index 100%
rename from mall/.git_disabled/objects/13/fe09a27e5ae9dfb3acba8c0b6c863ef1d1b27c
rename to .git_disabled/objects/13/fe09a27e5ae9dfb3acba8c0b6c863ef1d1b27c
diff --git a/mall/.git_disabled/objects/14/7f2b3ba0f037fc23ff7e554b9f2dc54d772ecc b/.git_disabled/objects/14/7f2b3ba0f037fc23ff7e554b9f2dc54d772ecc
similarity index 100%
rename from mall/.git_disabled/objects/14/7f2b3ba0f037fc23ff7e554b9f2dc54d772ecc
rename to .git_disabled/objects/14/7f2b3ba0f037fc23ff7e554b9f2dc54d772ecc
diff --git a/mall/.git_disabled/objects/14/7fbe1a877abf30870ef2f3697d2353bd3a960c b/.git_disabled/objects/14/7fbe1a877abf30870ef2f3697d2353bd3a960c
similarity index 100%
rename from mall/.git_disabled/objects/14/7fbe1a877abf30870ef2f3697d2353bd3a960c
rename to .git_disabled/objects/14/7fbe1a877abf30870ef2f3697d2353bd3a960c
diff --git a/mall/.git_disabled/objects/14/9e6520aa7c7148cf986ddd101f5834c628631e b/.git_disabled/objects/14/9e6520aa7c7148cf986ddd101f5834c628631e
similarity index 100%
rename from mall/.git_disabled/objects/14/9e6520aa7c7148cf986ddd101f5834c628631e
rename to .git_disabled/objects/14/9e6520aa7c7148cf986ddd101f5834c628631e
diff --git a/mall/.git_disabled/objects/15/67c72bebe9966a084da09bb8da3dcfa795faeb b/.git_disabled/objects/15/67c72bebe9966a084da09bb8da3dcfa795faeb
similarity index 100%
rename from mall/.git_disabled/objects/15/67c72bebe9966a084da09bb8da3dcfa795faeb
rename to .git_disabled/objects/15/67c72bebe9966a084da09bb8da3dcfa795faeb
diff --git a/mall/.git_disabled/objects/15/92bcab98e8678ef9a52ecc284be9ddaa957077 b/.git_disabled/objects/15/92bcab98e8678ef9a52ecc284be9ddaa957077
similarity index 100%
rename from mall/.git_disabled/objects/15/92bcab98e8678ef9a52ecc284be9ddaa957077
rename to .git_disabled/objects/15/92bcab98e8678ef9a52ecc284be9ddaa957077
diff --git a/mall/.git_disabled/objects/16/103cffeb25b133671b55931ee327c1a6065443 b/.git_disabled/objects/16/103cffeb25b133671b55931ee327c1a6065443
similarity index 100%
rename from mall/.git_disabled/objects/16/103cffeb25b133671b55931ee327c1a6065443
rename to .git_disabled/objects/16/103cffeb25b133671b55931ee327c1a6065443
diff --git a/mall/.git_disabled/objects/16/c2fafc914ccdd36c9d0f1ccfe861f7e3a49bd7 b/.git_disabled/objects/16/c2fafc914ccdd36c9d0f1ccfe861f7e3a49bd7
similarity index 100%
rename from mall/.git_disabled/objects/16/c2fafc914ccdd36c9d0f1ccfe861f7e3a49bd7
rename to .git_disabled/objects/16/c2fafc914ccdd36c9d0f1ccfe861f7e3a49bd7
diff --git a/mall/.git_disabled/objects/17/df18fed1f5bb4c133c825f81588fef96dd1245 b/.git_disabled/objects/17/df18fed1f5bb4c133c825f81588fef96dd1245
similarity index 100%
rename from mall/.git_disabled/objects/17/df18fed1f5bb4c133c825f81588fef96dd1245
rename to .git_disabled/objects/17/df18fed1f5bb4c133c825f81588fef96dd1245
diff --git a/mall/.git_disabled/objects/17/e2fe7b101b8f0fdb4bfe1f07d927b6696859c6 b/.git_disabled/objects/17/e2fe7b101b8f0fdb4bfe1f07d927b6696859c6
similarity index 100%
rename from mall/.git_disabled/objects/17/e2fe7b101b8f0fdb4bfe1f07d927b6696859c6
rename to .git_disabled/objects/17/e2fe7b101b8f0fdb4bfe1f07d927b6696859c6
diff --git a/mall/.git_disabled/objects/18/0ef42521d7bf5cdadf85393eca662932691c07 b/.git_disabled/objects/18/0ef42521d7bf5cdadf85393eca662932691c07
similarity index 100%
rename from mall/.git_disabled/objects/18/0ef42521d7bf5cdadf85393eca662932691c07
rename to .git_disabled/objects/18/0ef42521d7bf5cdadf85393eca662932691c07
diff --git a/mall/.git_disabled/objects/18/4941cd3a4e9acba709d46b9aa9bd7960848536 b/.git_disabled/objects/18/4941cd3a4e9acba709d46b9aa9bd7960848536
similarity index 100%
rename from mall/.git_disabled/objects/18/4941cd3a4e9acba709d46b9aa9bd7960848536
rename to .git_disabled/objects/18/4941cd3a4e9acba709d46b9aa9bd7960848536
diff --git a/mall/.git_disabled/objects/18/83070ece89251104029e8126204c3dc18fd472 b/.git_disabled/objects/18/83070ece89251104029e8126204c3dc18fd472
similarity index 100%
rename from mall/.git_disabled/objects/18/83070ece89251104029e8126204c3dc18fd472
rename to .git_disabled/objects/18/83070ece89251104029e8126204c3dc18fd472
diff --git a/mall/.git_disabled/objects/18/dab945708274aabc176efcbd01991ca8f21abd b/.git_disabled/objects/18/dab945708274aabc176efcbd01991ca8f21abd
similarity index 100%
rename from mall/.git_disabled/objects/18/dab945708274aabc176efcbd01991ca8f21abd
rename to .git_disabled/objects/18/dab945708274aabc176efcbd01991ca8f21abd
diff --git a/mall/.git_disabled/objects/18/ee45d070678e985d9da10180e8876627b5e51d b/.git_disabled/objects/18/ee45d070678e985d9da10180e8876627b5e51d
similarity index 100%
rename from mall/.git_disabled/objects/18/ee45d070678e985d9da10180e8876627b5e51d
rename to .git_disabled/objects/18/ee45d070678e985d9da10180e8876627b5e51d
diff --git a/mall/.git_disabled/objects/19/ae75f354c800ec08415224e8e139c373d5f2c3 b/.git_disabled/objects/19/ae75f354c800ec08415224e8e139c373d5f2c3
similarity index 100%
rename from mall/.git_disabled/objects/19/ae75f354c800ec08415224e8e139c373d5f2c3
rename to .git_disabled/objects/19/ae75f354c800ec08415224e8e139c373d5f2c3
diff --git a/mall/.git_disabled/objects/19/bf509dd78f165673c49c5d3ddda5561550a56e b/.git_disabled/objects/19/bf509dd78f165673c49c5d3ddda5561550a56e
similarity index 100%
rename from mall/.git_disabled/objects/19/bf509dd78f165673c49c5d3ddda5561550a56e
rename to .git_disabled/objects/19/bf509dd78f165673c49c5d3ddda5561550a56e
diff --git a/mall/.git_disabled/objects/19/de501a908a11519ec148e74ef268811c717040 b/.git_disabled/objects/19/de501a908a11519ec148e74ef268811c717040
similarity index 100%
rename from mall/.git_disabled/objects/19/de501a908a11519ec148e74ef268811c717040
rename to .git_disabled/objects/19/de501a908a11519ec148e74ef268811c717040
diff --git a/mall/.git_disabled/objects/1b/3aa3821b0fc5aa94f104ebadea06664be7d73a b/.git_disabled/objects/1b/3aa3821b0fc5aa94f104ebadea06664be7d73a
similarity index 100%
rename from mall/.git_disabled/objects/1b/3aa3821b0fc5aa94f104ebadea06664be7d73a
rename to .git_disabled/objects/1b/3aa3821b0fc5aa94f104ebadea06664be7d73a
diff --git a/mall/.git_disabled/objects/1b/6aeefab0c91d2d40f8302ae4b4bdf6415d6d7c b/.git_disabled/objects/1b/6aeefab0c91d2d40f8302ae4b4bdf6415d6d7c
similarity index 100%
rename from mall/.git_disabled/objects/1b/6aeefab0c91d2d40f8302ae4b4bdf6415d6d7c
rename to .git_disabled/objects/1b/6aeefab0c91d2d40f8302ae4b4bdf6415d6d7c
diff --git a/mall/.git_disabled/objects/1b/787617684d74767d6260da32d9567815999202 b/.git_disabled/objects/1b/787617684d74767d6260da32d9567815999202
similarity index 100%
rename from mall/.git_disabled/objects/1b/787617684d74767d6260da32d9567815999202
rename to .git_disabled/objects/1b/787617684d74767d6260da32d9567815999202
diff --git a/mall/.git_disabled/objects/1b/7b95f34f597de771ca1ee1a9d66ddfd4389dc3 b/.git_disabled/objects/1b/7b95f34f597de771ca1ee1a9d66ddfd4389dc3
similarity index 100%
rename from mall/.git_disabled/objects/1b/7b95f34f597de771ca1ee1a9d66ddfd4389dc3
rename to .git_disabled/objects/1b/7b95f34f597de771ca1ee1a9d66ddfd4389dc3
diff --git a/mall/.git_disabled/objects/1b/83b5e0b358b18c0d830d2b597aaab40d040297 b/.git_disabled/objects/1b/83b5e0b358b18c0d830d2b597aaab40d040297
similarity index 100%
rename from mall/.git_disabled/objects/1b/83b5e0b358b18c0d830d2b597aaab40d040297
rename to .git_disabled/objects/1b/83b5e0b358b18c0d830d2b597aaab40d040297
diff --git a/mall/.git_disabled/objects/1b/dcf0c258e3b224e6d505aac4c3eb426d06bbbf b/.git_disabled/objects/1b/dcf0c258e3b224e6d505aac4c3eb426d06bbbf
similarity index 100%
rename from mall/.git_disabled/objects/1b/dcf0c258e3b224e6d505aac4c3eb426d06bbbf
rename to .git_disabled/objects/1b/dcf0c258e3b224e6d505aac4c3eb426d06bbbf
diff --git a/mall/.git_disabled/objects/1b/eb9a3fa2ed892e2b558611e02e57296c7d87a6 b/.git_disabled/objects/1b/eb9a3fa2ed892e2b558611e02e57296c7d87a6
similarity index 100%
rename from mall/.git_disabled/objects/1b/eb9a3fa2ed892e2b558611e02e57296c7d87a6
rename to .git_disabled/objects/1b/eb9a3fa2ed892e2b558611e02e57296c7d87a6
diff --git a/mall/.git_disabled/objects/1b/ff67d42ff6c38a2800aa87bfc503cd7134a470 b/.git_disabled/objects/1b/ff67d42ff6c38a2800aa87bfc503cd7134a470
similarity index 100%
rename from mall/.git_disabled/objects/1b/ff67d42ff6c38a2800aa87bfc503cd7134a470
rename to .git_disabled/objects/1b/ff67d42ff6c38a2800aa87bfc503cd7134a470
diff --git a/mall/.git_disabled/objects/1c/8b5a11f024d5b079241c2689c4bf1c8c9aa407 b/.git_disabled/objects/1c/8b5a11f024d5b079241c2689c4bf1c8c9aa407
similarity index 100%
rename from mall/.git_disabled/objects/1c/8b5a11f024d5b079241c2689c4bf1c8c9aa407
rename to .git_disabled/objects/1c/8b5a11f024d5b079241c2689c4bf1c8c9aa407
diff --git a/mall/.git_disabled/objects/1c/b6e8881f98fe015c076f5469247fb4482738df b/.git_disabled/objects/1c/b6e8881f98fe015c076f5469247fb4482738df
similarity index 100%
rename from mall/.git_disabled/objects/1c/b6e8881f98fe015c076f5469247fb4482738df
rename to .git_disabled/objects/1c/b6e8881f98fe015c076f5469247fb4482738df
diff --git a/mall/.git_disabled/objects/1e/163a2ce00a24d44df5a10d30d596309f97b2ef b/.git_disabled/objects/1e/163a2ce00a24d44df5a10d30d596309f97b2ef
similarity index 100%
rename from mall/.git_disabled/objects/1e/163a2ce00a24d44df5a10d30d596309f97b2ef
rename to .git_disabled/objects/1e/163a2ce00a24d44df5a10d30d596309f97b2ef
diff --git a/mall/.git_disabled/objects/1e/48bf62554917c4b4a449e6b9892f0a8e516121 b/.git_disabled/objects/1e/48bf62554917c4b4a449e6b9892f0a8e516121
similarity index 100%
rename from mall/.git_disabled/objects/1e/48bf62554917c4b4a449e6b9892f0a8e516121
rename to .git_disabled/objects/1e/48bf62554917c4b4a449e6b9892f0a8e516121
diff --git a/mall/.git_disabled/objects/1e/56968b9e9f2101628e6e5553974a412adde23b b/.git_disabled/objects/1e/56968b9e9f2101628e6e5553974a412adde23b
similarity index 100%
rename from mall/.git_disabled/objects/1e/56968b9e9f2101628e6e5553974a412adde23b
rename to .git_disabled/objects/1e/56968b9e9f2101628e6e5553974a412adde23b
diff --git a/mall/.git_disabled/objects/1e/8000a5fdc86e82f5dcd3a07e8d167adb5b88be b/.git_disabled/objects/1e/8000a5fdc86e82f5dcd3a07e8d167adb5b88be
similarity index 100%
rename from mall/.git_disabled/objects/1e/8000a5fdc86e82f5dcd3a07e8d167adb5b88be
rename to .git_disabled/objects/1e/8000a5fdc86e82f5dcd3a07e8d167adb5b88be
diff --git a/mall/.git_disabled/objects/1f/39c33a9265c390acceba97e36b561406e40474 b/.git_disabled/objects/1f/39c33a9265c390acceba97e36b561406e40474
similarity index 100%
rename from mall/.git_disabled/objects/1f/39c33a9265c390acceba97e36b561406e40474
rename to .git_disabled/objects/1f/39c33a9265c390acceba97e36b561406e40474
diff --git a/mall/.git_disabled/objects/1f/78e4d427eec7184f10ab308161d210155786db b/.git_disabled/objects/1f/78e4d427eec7184f10ab308161d210155786db
similarity index 100%
rename from mall/.git_disabled/objects/1f/78e4d427eec7184f10ab308161d210155786db
rename to .git_disabled/objects/1f/78e4d427eec7184f10ab308161d210155786db
diff --git a/mall/.git_disabled/objects/1f/dcb2c0e56e9d2c5d04860dcf524024a5a5f71c b/.git_disabled/objects/1f/dcb2c0e56e9d2c5d04860dcf524024a5a5f71c
similarity index 100%
rename from mall/.git_disabled/objects/1f/dcb2c0e56e9d2c5d04860dcf524024a5a5f71c
rename to .git_disabled/objects/1f/dcb2c0e56e9d2c5d04860dcf524024a5a5f71c
diff --git a/mall/.git_disabled/objects/20/22a587f691d68b43ee561754068e7a22b1eb65 b/.git_disabled/objects/20/22a587f691d68b43ee561754068e7a22b1eb65
similarity index 100%
rename from mall/.git_disabled/objects/20/22a587f691d68b43ee561754068e7a22b1eb65
rename to .git_disabled/objects/20/22a587f691d68b43ee561754068e7a22b1eb65
diff --git a/mall/.git_disabled/objects/20/8cface25b7b54ba263b613ef98a30e18aeb7f5 b/.git_disabled/objects/20/8cface25b7b54ba263b613ef98a30e18aeb7f5
similarity index 100%
rename from mall/.git_disabled/objects/20/8cface25b7b54ba263b613ef98a30e18aeb7f5
rename to .git_disabled/objects/20/8cface25b7b54ba263b613ef98a30e18aeb7f5
diff --git a/mall/.git_disabled/objects/20/d50671e0efd5f6b30c167573daaa490cb2d9df b/.git_disabled/objects/20/d50671e0efd5f6b30c167573daaa490cb2d9df
similarity index 100%
rename from mall/.git_disabled/objects/20/d50671e0efd5f6b30c167573daaa490cb2d9df
rename to .git_disabled/objects/20/d50671e0efd5f6b30c167573daaa490cb2d9df
diff --git a/mall/.git_disabled/objects/21/33fc673b45dab46bfe6b6efc5a699ebabe2035 b/.git_disabled/objects/21/33fc673b45dab46bfe6b6efc5a699ebabe2035
similarity index 100%
rename from mall/.git_disabled/objects/21/33fc673b45dab46bfe6b6efc5a699ebabe2035
rename to .git_disabled/objects/21/33fc673b45dab46bfe6b6efc5a699ebabe2035
diff --git a/mall/.git_disabled/objects/21/580e5014c27303a68e020f7f01f2affe9e33a9 b/.git_disabled/objects/21/580e5014c27303a68e020f7f01f2affe9e33a9
similarity index 100%
rename from mall/.git_disabled/objects/21/580e5014c27303a68e020f7f01f2affe9e33a9
rename to .git_disabled/objects/21/580e5014c27303a68e020f7f01f2affe9e33a9
diff --git a/mall/.git_disabled/objects/22/6d8b92c711ab33f201340b8631c0712d52711e b/.git_disabled/objects/22/6d8b92c711ab33f201340b8631c0712d52711e
similarity index 100%
rename from mall/.git_disabled/objects/22/6d8b92c711ab33f201340b8631c0712d52711e
rename to .git_disabled/objects/22/6d8b92c711ab33f201340b8631c0712d52711e
diff --git a/mall/.git_disabled/objects/22/e586d1e7f20be7f5f9d594d9bce37f1985c839 b/.git_disabled/objects/22/e586d1e7f20be7f5f9d594d9bce37f1985c839
similarity index 100%
rename from mall/.git_disabled/objects/22/e586d1e7f20be7f5f9d594d9bce37f1985c839
rename to .git_disabled/objects/22/e586d1e7f20be7f5f9d594d9bce37f1985c839
diff --git a/mall/.git_disabled/objects/23/300e7c1f188b220316718291216d44c6a227e0 b/.git_disabled/objects/23/300e7c1f188b220316718291216d44c6a227e0
similarity index 100%
rename from mall/.git_disabled/objects/23/300e7c1f188b220316718291216d44c6a227e0
rename to .git_disabled/objects/23/300e7c1f188b220316718291216d44c6a227e0
diff --git a/mall/.git_disabled/objects/23/4c8c9b7c53316498712767ec4f8a6e09d5edae b/.git_disabled/objects/23/4c8c9b7c53316498712767ec4f8a6e09d5edae
similarity index 100%
rename from mall/.git_disabled/objects/23/4c8c9b7c53316498712767ec4f8a6e09d5edae
rename to .git_disabled/objects/23/4c8c9b7c53316498712767ec4f8a6e09d5edae
diff --git a/mall/.git_disabled/objects/23/8d5a9ebe4035a679b0980182c9620be18002ac b/.git_disabled/objects/23/8d5a9ebe4035a679b0980182c9620be18002ac
similarity index 100%
rename from mall/.git_disabled/objects/23/8d5a9ebe4035a679b0980182c9620be18002ac
rename to .git_disabled/objects/23/8d5a9ebe4035a679b0980182c9620be18002ac
diff --git a/mall/.git_disabled/objects/24/52ff13e613ae15f1139988ff429504631c7094 b/.git_disabled/objects/24/52ff13e613ae15f1139988ff429504631c7094
similarity index 100%
rename from mall/.git_disabled/objects/24/52ff13e613ae15f1139988ff429504631c7094
rename to .git_disabled/objects/24/52ff13e613ae15f1139988ff429504631c7094
diff --git a/mall/.git_disabled/objects/24/e78cbf7072bd8878711834ec2e737279c5be56 b/.git_disabled/objects/24/e78cbf7072bd8878711834ec2e737279c5be56
similarity index 100%
rename from mall/.git_disabled/objects/24/e78cbf7072bd8878711834ec2e737279c5be56
rename to .git_disabled/objects/24/e78cbf7072bd8878711834ec2e737279c5be56
diff --git a/mall/.git_disabled/objects/24/fe0f9c7cfe870424807220dd13713431873c84 b/.git_disabled/objects/24/fe0f9c7cfe870424807220dd13713431873c84
similarity index 100%
rename from mall/.git_disabled/objects/24/fe0f9c7cfe870424807220dd13713431873c84
rename to .git_disabled/objects/24/fe0f9c7cfe870424807220dd13713431873c84
diff --git a/mall/.git_disabled/objects/25/736772286ae52ecdedc84fdad7696a312e9cf8 b/.git_disabled/objects/25/736772286ae52ecdedc84fdad7696a312e9cf8
similarity index 100%
rename from mall/.git_disabled/objects/25/736772286ae52ecdedc84fdad7696a312e9cf8
rename to .git_disabled/objects/25/736772286ae52ecdedc84fdad7696a312e9cf8
diff --git a/mall/.git_disabled/objects/25/7f52f5454af5123fedc7fae385cb5b4a82f89b b/.git_disabled/objects/25/7f52f5454af5123fedc7fae385cb5b4a82f89b
similarity index 100%
rename from mall/.git_disabled/objects/25/7f52f5454af5123fedc7fae385cb5b4a82f89b
rename to .git_disabled/objects/25/7f52f5454af5123fedc7fae385cb5b4a82f89b
diff --git a/mall/.git_disabled/objects/25/ba378f6366b29d2d906dad0ad254464e0ddfd6 b/.git_disabled/objects/25/ba378f6366b29d2d906dad0ad254464e0ddfd6
similarity index 100%
rename from mall/.git_disabled/objects/25/ba378f6366b29d2d906dad0ad254464e0ddfd6
rename to .git_disabled/objects/25/ba378f6366b29d2d906dad0ad254464e0ddfd6
diff --git a/mall/.git_disabled/objects/25/d48391084c4a847f05d5892a413cea1f5c3948 b/.git_disabled/objects/25/d48391084c4a847f05d5892a413cea1f5c3948
similarity index 100%
rename from mall/.git_disabled/objects/25/d48391084c4a847f05d5892a413cea1f5c3948
rename to .git_disabled/objects/25/d48391084c4a847f05d5892a413cea1f5c3948
diff --git a/mall/.git_disabled/objects/26/29410e6b05ff7f61c2b3274a1e4bc2d70c14c1 b/.git_disabled/objects/26/29410e6b05ff7f61c2b3274a1e4bc2d70c14c1
similarity index 100%
rename from mall/.git_disabled/objects/26/29410e6b05ff7f61c2b3274a1e4bc2d70c14c1
rename to .git_disabled/objects/26/29410e6b05ff7f61c2b3274a1e4bc2d70c14c1
diff --git a/mall/.git_disabled/objects/26/8e76c79f234b923a1830f675ec9328cad00422 b/.git_disabled/objects/26/8e76c79f234b923a1830f675ec9328cad00422
similarity index 100%
rename from mall/.git_disabled/objects/26/8e76c79f234b923a1830f675ec9328cad00422
rename to .git_disabled/objects/26/8e76c79f234b923a1830f675ec9328cad00422
diff --git a/mall/.git_disabled/objects/26/9cbc4b1f06a0580c6b0c32d46f27fc51ac3d32 b/.git_disabled/objects/26/9cbc4b1f06a0580c6b0c32d46f27fc51ac3d32
similarity index 100%
rename from mall/.git_disabled/objects/26/9cbc4b1f06a0580c6b0c32d46f27fc51ac3d32
rename to .git_disabled/objects/26/9cbc4b1f06a0580c6b0c32d46f27fc51ac3d32
diff --git a/mall/.git_disabled/objects/27/d5f5841728f9e41147e796c578128749e56ed1 b/.git_disabled/objects/27/d5f5841728f9e41147e796c578128749e56ed1
similarity index 100%
rename from mall/.git_disabled/objects/27/d5f5841728f9e41147e796c578128749e56ed1
rename to .git_disabled/objects/27/d5f5841728f9e41147e796c578128749e56ed1
diff --git a/mall/.git_disabled/objects/27/e3757e0da5ca90b005f469a9a8645555bd880f b/.git_disabled/objects/27/e3757e0da5ca90b005f469a9a8645555bd880f
similarity index 100%
rename from mall/.git_disabled/objects/27/e3757e0da5ca90b005f469a9a8645555bd880f
rename to .git_disabled/objects/27/e3757e0da5ca90b005f469a9a8645555bd880f
diff --git a/mall/.git_disabled/objects/28/299d2730a56d7cb240f4ad3c4309daf6fc5902 b/.git_disabled/objects/28/299d2730a56d7cb240f4ad3c4309daf6fc5902
similarity index 100%
rename from mall/.git_disabled/objects/28/299d2730a56d7cb240f4ad3c4309daf6fc5902
rename to .git_disabled/objects/28/299d2730a56d7cb240f4ad3c4309daf6fc5902
diff --git a/mall/.git_disabled/objects/28/5660df34948c0f841852b752ee4cd08d5d93d9 b/.git_disabled/objects/28/5660df34948c0f841852b752ee4cd08d5d93d9
similarity index 100%
rename from mall/.git_disabled/objects/28/5660df34948c0f841852b752ee4cd08d5d93d9
rename to .git_disabled/objects/28/5660df34948c0f841852b752ee4cd08d5d93d9
diff --git a/mall/.git_disabled/objects/28/b252f1254464cc50677485fef5a8b2c5f94b3a b/.git_disabled/objects/28/b252f1254464cc50677485fef5a8b2c5f94b3a
similarity index 100%
rename from mall/.git_disabled/objects/28/b252f1254464cc50677485fef5a8b2c5f94b3a
rename to .git_disabled/objects/28/b252f1254464cc50677485fef5a8b2c5f94b3a
diff --git a/mall/.git_disabled/objects/29/0e5606885e2f06de05d769f4b8c098d7b4148b b/.git_disabled/objects/29/0e5606885e2f06de05d769f4b8c098d7b4148b
similarity index 100%
rename from mall/.git_disabled/objects/29/0e5606885e2f06de05d769f4b8c098d7b4148b
rename to .git_disabled/objects/29/0e5606885e2f06de05d769f4b8c098d7b4148b
diff --git a/mall/.git_disabled/objects/29/8bc55229c06bd010c6c16921c272fc9e1c68f9 b/.git_disabled/objects/29/8bc55229c06bd010c6c16921c272fc9e1c68f9
similarity index 100%
rename from mall/.git_disabled/objects/29/8bc55229c06bd010c6c16921c272fc9e1c68f9
rename to .git_disabled/objects/29/8bc55229c06bd010c6c16921c272fc9e1c68f9
diff --git a/mall/.git_disabled/objects/2a/92a152b849cf9d885504c74dc3d76c2d2685eb b/.git_disabled/objects/2a/92a152b849cf9d885504c74dc3d76c2d2685eb
similarity index 100%
rename from mall/.git_disabled/objects/2a/92a152b849cf9d885504c74dc3d76c2d2685eb
rename to .git_disabled/objects/2a/92a152b849cf9d885504c74dc3d76c2d2685eb
diff --git a/mall/.git_disabled/objects/2b/0ee0c8b6a507fefa5b29f5c4e06c033f34ab2a b/.git_disabled/objects/2b/0ee0c8b6a507fefa5b29f5c4e06c033f34ab2a
similarity index 100%
rename from mall/.git_disabled/objects/2b/0ee0c8b6a507fefa5b29f5c4e06c033f34ab2a
rename to .git_disabled/objects/2b/0ee0c8b6a507fefa5b29f5c4e06c033f34ab2a
diff --git a/mall/.git_disabled/objects/2c/1c72e65fb19248f19b996259be52f3b2fefd56 b/.git_disabled/objects/2c/1c72e65fb19248f19b996259be52f3b2fefd56
similarity index 100%
rename from mall/.git_disabled/objects/2c/1c72e65fb19248f19b996259be52f3b2fefd56
rename to .git_disabled/objects/2c/1c72e65fb19248f19b996259be52f3b2fefd56
diff --git a/mall/.git_disabled/objects/2c/1e55edc460bdf35a9a143ac13c9497c7c889c1 b/.git_disabled/objects/2c/1e55edc460bdf35a9a143ac13c9497c7c889c1
similarity index 100%
rename from mall/.git_disabled/objects/2c/1e55edc460bdf35a9a143ac13c9497c7c889c1
rename to .git_disabled/objects/2c/1e55edc460bdf35a9a143ac13c9497c7c889c1
diff --git a/mall/.git_disabled/objects/2c/4a4a97e7c3a8b6dd62e1d2dda669242dd3d5db b/.git_disabled/objects/2c/4a4a97e7c3a8b6dd62e1d2dda669242dd3d5db
similarity index 100%
rename from mall/.git_disabled/objects/2c/4a4a97e7c3a8b6dd62e1d2dda669242dd3d5db
rename to .git_disabled/objects/2c/4a4a97e7c3a8b6dd62e1d2dda669242dd3d5db
diff --git a/mall/.git_disabled/objects/2c/be8d1a3684315092236e303bb42faed05592c5 b/.git_disabled/objects/2c/be8d1a3684315092236e303bb42faed05592c5
similarity index 100%
rename from mall/.git_disabled/objects/2c/be8d1a3684315092236e303bb42faed05592c5
rename to .git_disabled/objects/2c/be8d1a3684315092236e303bb42faed05592c5
diff --git a/mall/.git_disabled/objects/2c/c8b4fc926115a271ee3474554793f1403150cf b/.git_disabled/objects/2c/c8b4fc926115a271ee3474554793f1403150cf
similarity index 100%
rename from mall/.git_disabled/objects/2c/c8b4fc926115a271ee3474554793f1403150cf
rename to .git_disabled/objects/2c/c8b4fc926115a271ee3474554793f1403150cf
diff --git a/mall/.git_disabled/objects/2d/3a88b2053d98e981ac813c002d01e063cd94d8 b/.git_disabled/objects/2d/3a88b2053d98e981ac813c002d01e063cd94d8
similarity index 100%
rename from mall/.git_disabled/objects/2d/3a88b2053d98e981ac813c002d01e063cd94d8
rename to .git_disabled/objects/2d/3a88b2053d98e981ac813c002d01e063cd94d8
diff --git a/mall/.git_disabled/objects/2d/8ea88b0a4c8ba1c52207099e056a8cffdd48c1 b/.git_disabled/objects/2d/8ea88b0a4c8ba1c52207099e056a8cffdd48c1
similarity index 100%
rename from mall/.git_disabled/objects/2d/8ea88b0a4c8ba1c52207099e056a8cffdd48c1
rename to .git_disabled/objects/2d/8ea88b0a4c8ba1c52207099e056a8cffdd48c1
diff --git a/mall/.git_disabled/objects/2e/81146c1b592a07c9bc4d13a58d315276270ec3 b/.git_disabled/objects/2e/81146c1b592a07c9bc4d13a58d315276270ec3
similarity index 100%
rename from mall/.git_disabled/objects/2e/81146c1b592a07c9bc4d13a58d315276270ec3
rename to .git_disabled/objects/2e/81146c1b592a07c9bc4d13a58d315276270ec3
diff --git a/mall/.git_disabled/objects/2e/decb814e2097a27a7f8b496a045ecdd415f12c b/.git_disabled/objects/2e/decb814e2097a27a7f8b496a045ecdd415f12c
similarity index 100%
rename from mall/.git_disabled/objects/2e/decb814e2097a27a7f8b496a045ecdd415f12c
rename to .git_disabled/objects/2e/decb814e2097a27a7f8b496a045ecdd415f12c
diff --git a/mall/.git_disabled/objects/2f/0ce74e8ba0b322284b6e3687795cbdf0b888ca b/.git_disabled/objects/2f/0ce74e8ba0b322284b6e3687795cbdf0b888ca
similarity index 100%
rename from mall/.git_disabled/objects/2f/0ce74e8ba0b322284b6e3687795cbdf0b888ca
rename to .git_disabled/objects/2f/0ce74e8ba0b322284b6e3687795cbdf0b888ca
diff --git a/mall/.git_disabled/objects/2f/144d96a7c5181be502c8da25816ee6b5fbdc53 b/.git_disabled/objects/2f/144d96a7c5181be502c8da25816ee6b5fbdc53
similarity index 100%
rename from mall/.git_disabled/objects/2f/144d96a7c5181be502c8da25816ee6b5fbdc53
rename to .git_disabled/objects/2f/144d96a7c5181be502c8da25816ee6b5fbdc53
diff --git a/mall/.git_disabled/objects/2f/a4541115539240980a1a9021d1fc2bd09f8b0b b/.git_disabled/objects/2f/a4541115539240980a1a9021d1fc2bd09f8b0b
similarity index 100%
rename from mall/.git_disabled/objects/2f/a4541115539240980a1a9021d1fc2bd09f8b0b
rename to .git_disabled/objects/2f/a4541115539240980a1a9021d1fc2bd09f8b0b
diff --git a/mall/.git_disabled/objects/30/ac59404abb6fc80352762c4b16bb502b0f7455 b/.git_disabled/objects/30/ac59404abb6fc80352762c4b16bb502b0f7455
similarity index 100%
rename from mall/.git_disabled/objects/30/ac59404abb6fc80352762c4b16bb502b0f7455
rename to .git_disabled/objects/30/ac59404abb6fc80352762c4b16bb502b0f7455
diff --git a/mall/.git_disabled/objects/30/c70f874b629eaeabb195cf41c483500c0cdf24 b/.git_disabled/objects/30/c70f874b629eaeabb195cf41c483500c0cdf24
similarity index 100%
rename from mall/.git_disabled/objects/30/c70f874b629eaeabb195cf41c483500c0cdf24
rename to .git_disabled/objects/30/c70f874b629eaeabb195cf41c483500c0cdf24
diff --git a/mall/.git_disabled/objects/31/b975111e856d266275ce3fade69d4c2d8f5033 b/.git_disabled/objects/31/b975111e856d266275ce3fade69d4c2d8f5033
similarity index 100%
rename from mall/.git_disabled/objects/31/b975111e856d266275ce3fade69d4c2d8f5033
rename to .git_disabled/objects/31/b975111e856d266275ce3fade69d4c2d8f5033
diff --git a/mall/.git_disabled/objects/31/cca3dfb52946d939e15ad38d1a89fa31c3e4ab b/.git_disabled/objects/31/cca3dfb52946d939e15ad38d1a89fa31c3e4ab
similarity index 100%
rename from mall/.git_disabled/objects/31/cca3dfb52946d939e15ad38d1a89fa31c3e4ab
rename to .git_disabled/objects/31/cca3dfb52946d939e15ad38d1a89fa31c3e4ab
diff --git a/mall/.git_disabled/objects/32/4ce61b8010d6b52aa895a06ad9642314247aa0 b/.git_disabled/objects/32/4ce61b8010d6b52aa895a06ad9642314247aa0
similarity index 100%
rename from mall/.git_disabled/objects/32/4ce61b8010d6b52aa895a06ad9642314247aa0
rename to .git_disabled/objects/32/4ce61b8010d6b52aa895a06ad9642314247aa0
diff --git a/mall/.git_disabled/objects/32/69c13ebc8ce97a97e352a359a9d8c999dc3e6f b/.git_disabled/objects/32/69c13ebc8ce97a97e352a359a9d8c999dc3e6f
similarity index 100%
rename from mall/.git_disabled/objects/32/69c13ebc8ce97a97e352a359a9d8c999dc3e6f
rename to .git_disabled/objects/32/69c13ebc8ce97a97e352a359a9d8c999dc3e6f
diff --git a/mall/.git_disabled/objects/33/081996e13f876d85089c19be852732faa01115 b/.git_disabled/objects/33/081996e13f876d85089c19be852732faa01115
similarity index 100%
rename from mall/.git_disabled/objects/33/081996e13f876d85089c19be852732faa01115
rename to .git_disabled/objects/33/081996e13f876d85089c19be852732faa01115
diff --git a/mall/.git_disabled/objects/33/4f8ae3e0d4b2016c1789cbe42a8edc8bc05f85 b/.git_disabled/objects/33/4f8ae3e0d4b2016c1789cbe42a8edc8bc05f85
similarity index 100%
rename from mall/.git_disabled/objects/33/4f8ae3e0d4b2016c1789cbe42a8edc8bc05f85
rename to .git_disabled/objects/33/4f8ae3e0d4b2016c1789cbe42a8edc8bc05f85
diff --git a/mall/.git_disabled/objects/33/79830ad2165b9342fbdaeb87e625a4418355ab b/.git_disabled/objects/33/79830ad2165b9342fbdaeb87e625a4418355ab
similarity index 100%
rename from mall/.git_disabled/objects/33/79830ad2165b9342fbdaeb87e625a4418355ab
rename to .git_disabled/objects/33/79830ad2165b9342fbdaeb87e625a4418355ab
diff --git a/mall/.git_disabled/objects/34/13f86c0eb29e52d7190df4bf06ef4cce9356cd b/.git_disabled/objects/34/13f86c0eb29e52d7190df4bf06ef4cce9356cd
similarity index 100%
rename from mall/.git_disabled/objects/34/13f86c0eb29e52d7190df4bf06ef4cce9356cd
rename to .git_disabled/objects/34/13f86c0eb29e52d7190df4bf06ef4cce9356cd
diff --git a/mall/.git_disabled/objects/35/ce4cff6e2ba290a45d8ba776ecf484f01b46f4 b/.git_disabled/objects/35/ce4cff6e2ba290a45d8ba776ecf484f01b46f4
similarity index 100%
rename from mall/.git_disabled/objects/35/ce4cff6e2ba290a45d8ba776ecf484f01b46f4
rename to .git_disabled/objects/35/ce4cff6e2ba290a45d8ba776ecf484f01b46f4
diff --git a/mall/.git_disabled/objects/35/f5ddc2e91df10b961dd836d0827fe9cc942fef b/.git_disabled/objects/35/f5ddc2e91df10b961dd836d0827fe9cc942fef
similarity index 100%
rename from mall/.git_disabled/objects/35/f5ddc2e91df10b961dd836d0827fe9cc942fef
rename to .git_disabled/objects/35/f5ddc2e91df10b961dd836d0827fe9cc942fef
diff --git a/mall/.git_disabled/objects/36/435e031d05ec3f07c895338e54b55b81a85673 b/.git_disabled/objects/36/435e031d05ec3f07c895338e54b55b81a85673
similarity index 100%
rename from mall/.git_disabled/objects/36/435e031d05ec3f07c895338e54b55b81a85673
rename to .git_disabled/objects/36/435e031d05ec3f07c895338e54b55b81a85673
diff --git a/mall/.git_disabled/objects/36/c899117a6cd78ea00c9231e860e4a8eb63e2cc b/.git_disabled/objects/36/c899117a6cd78ea00c9231e860e4a8eb63e2cc
similarity index 100%
rename from mall/.git_disabled/objects/36/c899117a6cd78ea00c9231e860e4a8eb63e2cc
rename to .git_disabled/objects/36/c899117a6cd78ea00c9231e860e4a8eb63e2cc
diff --git a/mall/.git_disabled/objects/37/432fa9442f666b4c992fdb2857987e62e31360 b/.git_disabled/objects/37/432fa9442f666b4c992fdb2857987e62e31360
similarity index 100%
rename from mall/.git_disabled/objects/37/432fa9442f666b4c992fdb2857987e62e31360
rename to .git_disabled/objects/37/432fa9442f666b4c992fdb2857987e62e31360
diff --git a/mall/.git_disabled/objects/38/b0e73b9c5fe57eb1257900c06db180342af2e9 b/.git_disabled/objects/38/b0e73b9c5fe57eb1257900c06db180342af2e9
similarity index 100%
rename from mall/.git_disabled/objects/38/b0e73b9c5fe57eb1257900c06db180342af2e9
rename to .git_disabled/objects/38/b0e73b9c5fe57eb1257900c06db180342af2e9
diff --git a/mall/.git_disabled/objects/38/cee1f63fe30088d4d98d569e01bbc6d30c7d19 b/.git_disabled/objects/38/cee1f63fe30088d4d98d569e01bbc6d30c7d19
similarity index 100%
rename from mall/.git_disabled/objects/38/cee1f63fe30088d4d98d569e01bbc6d30c7d19
rename to .git_disabled/objects/38/cee1f63fe30088d4d98d569e01bbc6d30c7d19
diff --git a/mall/.git_disabled/objects/39/1ca1aed712bf7de739f5618e0aa9311d8cb8a7 b/.git_disabled/objects/39/1ca1aed712bf7de739f5618e0aa9311d8cb8a7
similarity index 100%
rename from mall/.git_disabled/objects/39/1ca1aed712bf7de739f5618e0aa9311d8cb8a7
rename to .git_disabled/objects/39/1ca1aed712bf7de739f5618e0aa9311d8cb8a7
diff --git a/mall/.git_disabled/objects/39/4b450dd1b426150d4008b519aa7647a3db5c7e b/.git_disabled/objects/39/4b450dd1b426150d4008b519aa7647a3db5c7e
similarity index 100%
rename from mall/.git_disabled/objects/39/4b450dd1b426150d4008b519aa7647a3db5c7e
rename to .git_disabled/objects/39/4b450dd1b426150d4008b519aa7647a3db5c7e
diff --git a/mall/.git_disabled/objects/39/bfc14d807d39e6943ebb56fcff552f0f076291 b/.git_disabled/objects/39/bfc14d807d39e6943ebb56fcff552f0f076291
similarity index 100%
rename from mall/.git_disabled/objects/39/bfc14d807d39e6943ebb56fcff552f0f076291
rename to .git_disabled/objects/39/bfc14d807d39e6943ebb56fcff552f0f076291
diff --git a/mall/.git_disabled/objects/39/c6929b4ce524f268bdf6c9a35ed1142e15876a b/.git_disabled/objects/39/c6929b4ce524f268bdf6c9a35ed1142e15876a
similarity index 100%
rename from mall/.git_disabled/objects/39/c6929b4ce524f268bdf6c9a35ed1142e15876a
rename to .git_disabled/objects/39/c6929b4ce524f268bdf6c9a35ed1142e15876a
diff --git a/mall/.git_disabled/objects/3a/275cbecdd4ecc3b6c8a6c224e75a506854385f b/.git_disabled/objects/3a/275cbecdd4ecc3b6c8a6c224e75a506854385f
similarity index 100%
rename from mall/.git_disabled/objects/3a/275cbecdd4ecc3b6c8a6c224e75a506854385f
rename to .git_disabled/objects/3a/275cbecdd4ecc3b6c8a6c224e75a506854385f
diff --git a/mall/.git_disabled/objects/3a/4cd241b1bb00943722a8ed2cb1995ea95235e6 b/.git_disabled/objects/3a/4cd241b1bb00943722a8ed2cb1995ea95235e6
similarity index 100%
rename from mall/.git_disabled/objects/3a/4cd241b1bb00943722a8ed2cb1995ea95235e6
rename to .git_disabled/objects/3a/4cd241b1bb00943722a8ed2cb1995ea95235e6
diff --git a/mall/.git_disabled/objects/3b/7e062a4fb4224e3e94fe3b6c158b103519b6f6 b/.git_disabled/objects/3b/7e062a4fb4224e3e94fe3b6c158b103519b6f6
similarity index 100%
rename from mall/.git_disabled/objects/3b/7e062a4fb4224e3e94fe3b6c158b103519b6f6
rename to .git_disabled/objects/3b/7e062a4fb4224e3e94fe3b6c158b103519b6f6
diff --git a/mall/.git_disabled/objects/3b/8584d35625d986cd1eec83db87cdf09438ef74 b/.git_disabled/objects/3b/8584d35625d986cd1eec83db87cdf09438ef74
similarity index 100%
rename from mall/.git_disabled/objects/3b/8584d35625d986cd1eec83db87cdf09438ef74
rename to .git_disabled/objects/3b/8584d35625d986cd1eec83db87cdf09438ef74
diff --git a/mall/.git_disabled/objects/3c/7445168e74e221e30b4ec58e71d3490fa45809 b/.git_disabled/objects/3c/7445168e74e221e30b4ec58e71d3490fa45809
similarity index 100%
rename from mall/.git_disabled/objects/3c/7445168e74e221e30b4ec58e71d3490fa45809
rename to .git_disabled/objects/3c/7445168e74e221e30b4ec58e71d3490fa45809
diff --git a/mall/.git_disabled/objects/3d/6563399ccbd637d6b73d8f92c358506d457c0e b/.git_disabled/objects/3d/6563399ccbd637d6b73d8f92c358506d457c0e
similarity index 100%
rename from mall/.git_disabled/objects/3d/6563399ccbd637d6b73d8f92c358506d457c0e
rename to .git_disabled/objects/3d/6563399ccbd637d6b73d8f92c358506d457c0e
diff --git a/mall/.git_disabled/objects/3d/9f7f895677fb97d40b26a2501efaa73b33ae30 b/.git_disabled/objects/3d/9f7f895677fb97d40b26a2501efaa73b33ae30
similarity index 100%
rename from mall/.git_disabled/objects/3d/9f7f895677fb97d40b26a2501efaa73b33ae30
rename to .git_disabled/objects/3d/9f7f895677fb97d40b26a2501efaa73b33ae30
diff --git a/mall/.git_disabled/objects/3d/fb25d88e89853ddd6fb6f0e1658d4aa65c5b9e b/.git_disabled/objects/3d/fb25d88e89853ddd6fb6f0e1658d4aa65c5b9e
similarity index 100%
rename from mall/.git_disabled/objects/3d/fb25d88e89853ddd6fb6f0e1658d4aa65c5b9e
rename to .git_disabled/objects/3d/fb25d88e89853ddd6fb6f0e1658d4aa65c5b9e
diff --git a/mall/.git_disabled/objects/3e/32cec58337663bd5dc3c59fb47c51bf4e31726 b/.git_disabled/objects/3e/32cec58337663bd5dc3c59fb47c51bf4e31726
similarity index 100%
rename from mall/.git_disabled/objects/3e/32cec58337663bd5dc3c59fb47c51bf4e31726
rename to .git_disabled/objects/3e/32cec58337663bd5dc3c59fb47c51bf4e31726
diff --git a/mall/.git_disabled/objects/3e/57100d337529ec2d772d1af3e0f2e9def0262f b/.git_disabled/objects/3e/57100d337529ec2d772d1af3e0f2e9def0262f
similarity index 100%
rename from mall/.git_disabled/objects/3e/57100d337529ec2d772d1af3e0f2e9def0262f
rename to .git_disabled/objects/3e/57100d337529ec2d772d1af3e0f2e9def0262f
diff --git a/mall/.git_disabled/objects/3e/c108f198b75401890046dc3412dc9ba5b0d887 b/.git_disabled/objects/3e/c108f198b75401890046dc3412dc9ba5b0d887
similarity index 100%
rename from mall/.git_disabled/objects/3e/c108f198b75401890046dc3412dc9ba5b0d887
rename to .git_disabled/objects/3e/c108f198b75401890046dc3412dc9ba5b0d887
diff --git a/mall/.git_disabled/objects/3e/e235277f1576100bc9d580b1632a204e9aa4fe b/.git_disabled/objects/3e/e235277f1576100bc9d580b1632a204e9aa4fe
similarity index 100%
rename from mall/.git_disabled/objects/3e/e235277f1576100bc9d580b1632a204e9aa4fe
rename to .git_disabled/objects/3e/e235277f1576100bc9d580b1632a204e9aa4fe
diff --git a/mall/.git_disabled/objects/3f/107b78add37b54a0d4f31ead7a30f8439476ce b/.git_disabled/objects/3f/107b78add37b54a0d4f31ead7a30f8439476ce
similarity index 100%
rename from mall/.git_disabled/objects/3f/107b78add37b54a0d4f31ead7a30f8439476ce
rename to .git_disabled/objects/3f/107b78add37b54a0d4f31ead7a30f8439476ce
diff --git a/mall/.git_disabled/objects/3f/a08c8af9d22a7ae485af7f5c68a42ecc834272 b/.git_disabled/objects/3f/a08c8af9d22a7ae485af7f5c68a42ecc834272
similarity index 100%
rename from mall/.git_disabled/objects/3f/a08c8af9d22a7ae485af7f5c68a42ecc834272
rename to .git_disabled/objects/3f/a08c8af9d22a7ae485af7f5c68a42ecc834272
diff --git a/mall/.git_disabled/objects/3f/dd3ad545857ce2724d53a82b67a5e54d003661 b/.git_disabled/objects/3f/dd3ad545857ce2724d53a82b67a5e54d003661
similarity index 100%
rename from mall/.git_disabled/objects/3f/dd3ad545857ce2724d53a82b67a5e54d003661
rename to .git_disabled/objects/3f/dd3ad545857ce2724d53a82b67a5e54d003661
diff --git a/mall/.git_disabled/objects/40/4eb7e1fa07d4c75262899a9f94ff5bf6713ff5 b/.git_disabled/objects/40/4eb7e1fa07d4c75262899a9f94ff5bf6713ff5
similarity index 100%
rename from mall/.git_disabled/objects/40/4eb7e1fa07d4c75262899a9f94ff5bf6713ff5
rename to .git_disabled/objects/40/4eb7e1fa07d4c75262899a9f94ff5bf6713ff5
diff --git a/mall/.git_disabled/objects/40/938b6b337f4d391cf1c44a3f6509c2d7d6f082 b/.git_disabled/objects/40/938b6b337f4d391cf1c44a3f6509c2d7d6f082
similarity index 100%
rename from mall/.git_disabled/objects/40/938b6b337f4d391cf1c44a3f6509c2d7d6f082
rename to .git_disabled/objects/40/938b6b337f4d391cf1c44a3f6509c2d7d6f082
diff --git a/mall/.git_disabled/objects/41/dc0f0d913fbb241ad355a67de7f714ac26c1ca b/.git_disabled/objects/41/dc0f0d913fbb241ad355a67de7f714ac26c1ca
similarity index 100%
rename from mall/.git_disabled/objects/41/dc0f0d913fbb241ad355a67de7f714ac26c1ca
rename to .git_disabled/objects/41/dc0f0d913fbb241ad355a67de7f714ac26c1ca
diff --git a/mall/.git_disabled/objects/42/35f6eadd3a25378daf102630552013d046f071 b/.git_disabled/objects/42/35f6eadd3a25378daf102630552013d046f071
similarity index 100%
rename from mall/.git_disabled/objects/42/35f6eadd3a25378daf102630552013d046f071
rename to .git_disabled/objects/42/35f6eadd3a25378daf102630552013d046f071
diff --git a/mall/.git_disabled/objects/44/07421db98a92de0a0dba3480688fa052c5f813 b/.git_disabled/objects/44/07421db98a92de0a0dba3480688fa052c5f813
similarity index 100%
rename from mall/.git_disabled/objects/44/07421db98a92de0a0dba3480688fa052c5f813
rename to .git_disabled/objects/44/07421db98a92de0a0dba3480688fa052c5f813
diff --git a/mall/.git_disabled/objects/46/2242984cfbf9b875766147984ceb484e483b10 b/.git_disabled/objects/46/2242984cfbf9b875766147984ceb484e483b10
similarity index 100%
rename from mall/.git_disabled/objects/46/2242984cfbf9b875766147984ceb484e483b10
rename to .git_disabled/objects/46/2242984cfbf9b875766147984ceb484e483b10
diff --git a/mall/.git_disabled/objects/46/33b4b6ca3fadb3d57d532851a23a15470f1873 b/.git_disabled/objects/46/33b4b6ca3fadb3d57d532851a23a15470f1873
similarity index 100%
rename from mall/.git_disabled/objects/46/33b4b6ca3fadb3d57d532851a23a15470f1873
rename to .git_disabled/objects/46/33b4b6ca3fadb3d57d532851a23a15470f1873
diff --git a/mall/.git_disabled/objects/46/3ab6be92339b7835879f6ea54ac16e47bdce82 b/.git_disabled/objects/46/3ab6be92339b7835879f6ea54ac16e47bdce82
similarity index 100%
rename from mall/.git_disabled/objects/46/3ab6be92339b7835879f6ea54ac16e47bdce82
rename to .git_disabled/objects/46/3ab6be92339b7835879f6ea54ac16e47bdce82
diff --git a/mall/.git_disabled/objects/46/5042e1c9c6003972c9e5d5fb772859c2d650c6 b/.git_disabled/objects/46/5042e1c9c6003972c9e5d5fb772859c2d650c6
similarity index 100%
rename from mall/.git_disabled/objects/46/5042e1c9c6003972c9e5d5fb772859c2d650c6
rename to .git_disabled/objects/46/5042e1c9c6003972c9e5d5fb772859c2d650c6
diff --git a/mall/.git_disabled/objects/47/f8a0ca976845eafa82680adca9364c66a3a124 b/.git_disabled/objects/47/f8a0ca976845eafa82680adca9364c66a3a124
similarity index 100%
rename from mall/.git_disabled/objects/47/f8a0ca976845eafa82680adca9364c66a3a124
rename to .git_disabled/objects/47/f8a0ca976845eafa82680adca9364c66a3a124
diff --git a/mall/.git_disabled/objects/48/2d68a5484b39bc59dbc2915b8648aacae04b90 b/.git_disabled/objects/48/2d68a5484b39bc59dbc2915b8648aacae04b90
similarity index 100%
rename from mall/.git_disabled/objects/48/2d68a5484b39bc59dbc2915b8648aacae04b90
rename to .git_disabled/objects/48/2d68a5484b39bc59dbc2915b8648aacae04b90
diff --git a/mall/.git_disabled/objects/48/a43200440fe5676c07838796c6c62a757b8cd2 b/.git_disabled/objects/48/a43200440fe5676c07838796c6c62a757b8cd2
similarity index 100%
rename from mall/.git_disabled/objects/48/a43200440fe5676c07838796c6c62a757b8cd2
rename to .git_disabled/objects/48/a43200440fe5676c07838796c6c62a757b8cd2
diff --git a/mall/.git_disabled/objects/49/ccff181679e3f14c904911b4d182bc0bbdff87 b/.git_disabled/objects/49/ccff181679e3f14c904911b4d182bc0bbdff87
similarity index 100%
rename from mall/.git_disabled/objects/49/ccff181679e3f14c904911b4d182bc0bbdff87
rename to .git_disabled/objects/49/ccff181679e3f14c904911b4d182bc0bbdff87
diff --git a/mall/.git_disabled/objects/4a/b722a118d41f1999c2203d12742ace922b176d b/.git_disabled/objects/4a/b722a118d41f1999c2203d12742ace922b176d
similarity index 100%
rename from mall/.git_disabled/objects/4a/b722a118d41f1999c2203d12742ace922b176d
rename to .git_disabled/objects/4a/b722a118d41f1999c2203d12742ace922b176d
diff --git a/mall/.git_disabled/objects/4b/4eb4ca04c5bdfebfc6aa8c13754b2f0f640481 b/.git_disabled/objects/4b/4eb4ca04c5bdfebfc6aa8c13754b2f0f640481
similarity index 100%
rename from mall/.git_disabled/objects/4b/4eb4ca04c5bdfebfc6aa8c13754b2f0f640481
rename to .git_disabled/objects/4b/4eb4ca04c5bdfebfc6aa8c13754b2f0f640481
diff --git a/mall/.git_disabled/objects/4b/9a6bfcd9a5ee5406bf85bf5afdd177821a1de9 b/.git_disabled/objects/4b/9a6bfcd9a5ee5406bf85bf5afdd177821a1de9
similarity index 100%
rename from mall/.git_disabled/objects/4b/9a6bfcd9a5ee5406bf85bf5afdd177821a1de9
rename to .git_disabled/objects/4b/9a6bfcd9a5ee5406bf85bf5afdd177821a1de9
diff --git a/mall/.git_disabled/objects/4b/d0b1185c911d55a39523cc45e601f223f42e94 b/.git_disabled/objects/4b/d0b1185c911d55a39523cc45e601f223f42e94
similarity index 100%
rename from mall/.git_disabled/objects/4b/d0b1185c911d55a39523cc45e601f223f42e94
rename to .git_disabled/objects/4b/d0b1185c911d55a39523cc45e601f223f42e94
diff --git a/mall/.git_disabled/objects/4b/d7f122ed6729e5de708c17d963f7e22c5fe4ab b/.git_disabled/objects/4b/d7f122ed6729e5de708c17d963f7e22c5fe4ab
similarity index 100%
rename from mall/.git_disabled/objects/4b/d7f122ed6729e5de708c17d963f7e22c5fe4ab
rename to .git_disabled/objects/4b/d7f122ed6729e5de708c17d963f7e22c5fe4ab
diff --git a/mall/.git_disabled/objects/4b/db1c22f4589277d27b97b3abb53c1c3e25f256 b/.git_disabled/objects/4b/db1c22f4589277d27b97b3abb53c1c3e25f256
similarity index 100%
rename from mall/.git_disabled/objects/4b/db1c22f4589277d27b97b3abb53c1c3e25f256
rename to .git_disabled/objects/4b/db1c22f4589277d27b97b3abb53c1c3e25f256
diff --git a/mall/.git_disabled/objects/4c/81081239bfcc99b7d36362101d19c4d8de855a b/.git_disabled/objects/4c/81081239bfcc99b7d36362101d19c4d8de855a
similarity index 100%
rename from mall/.git_disabled/objects/4c/81081239bfcc99b7d36362101d19c4d8de855a
rename to .git_disabled/objects/4c/81081239bfcc99b7d36362101d19c4d8de855a
diff --git a/mall/.git_disabled/objects/4d/91437418f11cfc516a76aa7a34c402a465b4f8 b/.git_disabled/objects/4d/91437418f11cfc516a76aa7a34c402a465b4f8
similarity index 100%
rename from mall/.git_disabled/objects/4d/91437418f11cfc516a76aa7a34c402a465b4f8
rename to .git_disabled/objects/4d/91437418f11cfc516a76aa7a34c402a465b4f8
diff --git a/mall/.git_disabled/objects/4d/a64a2aabaf5a4eaa27f013e1771f241998241c b/.git_disabled/objects/4d/a64a2aabaf5a4eaa27f013e1771f241998241c
similarity index 100%
rename from mall/.git_disabled/objects/4d/a64a2aabaf5a4eaa27f013e1771f241998241c
rename to .git_disabled/objects/4d/a64a2aabaf5a4eaa27f013e1771f241998241c
diff --git a/mall/.git_disabled/objects/4d/ec90cbc07b379c02be611a55844d7cb6e74204 b/.git_disabled/objects/4d/ec90cbc07b379c02be611a55844d7cb6e74204
similarity index 100%
rename from mall/.git_disabled/objects/4d/ec90cbc07b379c02be611a55844d7cb6e74204
rename to .git_disabled/objects/4d/ec90cbc07b379c02be611a55844d7cb6e74204
diff --git a/mall/.git_disabled/objects/4e/072b393202fd716303d9741d437fefda357032 b/.git_disabled/objects/4e/072b393202fd716303d9741d437fefda357032
similarity index 100%
rename from mall/.git_disabled/objects/4e/072b393202fd716303d9741d437fefda357032
rename to .git_disabled/objects/4e/072b393202fd716303d9741d437fefda357032
diff --git a/mall/.git_disabled/objects/4e/099668d344161856d5536fe4a8c9b1ce960df0 b/.git_disabled/objects/4e/099668d344161856d5536fe4a8c9b1ce960df0
similarity index 100%
rename from mall/.git_disabled/objects/4e/099668d344161856d5536fe4a8c9b1ce960df0
rename to .git_disabled/objects/4e/099668d344161856d5536fe4a8c9b1ce960df0
diff --git a/mall/.git_disabled/objects/4e/4efb66049ffdd484da1e15b402bbcf53d3de15 b/.git_disabled/objects/4e/4efb66049ffdd484da1e15b402bbcf53d3de15
similarity index 100%
rename from mall/.git_disabled/objects/4e/4efb66049ffdd484da1e15b402bbcf53d3de15
rename to .git_disabled/objects/4e/4efb66049ffdd484da1e15b402bbcf53d3de15
diff --git a/mall/.git_disabled/objects/4e/d719cd38786fb5f9ab3b4c54bef2b9b16323b9 b/.git_disabled/objects/4e/d719cd38786fb5f9ab3b4c54bef2b9b16323b9
similarity index 100%
rename from mall/.git_disabled/objects/4e/d719cd38786fb5f9ab3b4c54bef2b9b16323b9
rename to .git_disabled/objects/4e/d719cd38786fb5f9ab3b4c54bef2b9b16323b9
diff --git a/mall/.git_disabled/objects/4f/17fe44fcacb6f8f6d8d40dd8e7fc26476d6f70 b/.git_disabled/objects/4f/17fe44fcacb6f8f6d8d40dd8e7fc26476d6f70
similarity index 100%
rename from mall/.git_disabled/objects/4f/17fe44fcacb6f8f6d8d40dd8e7fc26476d6f70
rename to .git_disabled/objects/4f/17fe44fcacb6f8f6d8d40dd8e7fc26476d6f70
diff --git a/mall/.git_disabled/objects/4f/bef3c18c64cfe91190ff31ccd6a8deffb957c3 b/.git_disabled/objects/4f/bef3c18c64cfe91190ff31ccd6a8deffb957c3
similarity index 100%
rename from mall/.git_disabled/objects/4f/bef3c18c64cfe91190ff31ccd6a8deffb957c3
rename to .git_disabled/objects/4f/bef3c18c64cfe91190ff31ccd6a8deffb957c3
diff --git a/mall/.git_disabled/objects/50/0dd3ed5e0fb22ac2a62d486989d0c1cbb79e7c b/.git_disabled/objects/50/0dd3ed5e0fb22ac2a62d486989d0c1cbb79e7c
similarity index 100%
rename from mall/.git_disabled/objects/50/0dd3ed5e0fb22ac2a62d486989d0c1cbb79e7c
rename to .git_disabled/objects/50/0dd3ed5e0fb22ac2a62d486989d0c1cbb79e7c
diff --git a/mall/.git_disabled/objects/50/467c2ae235740ae5b835cf7885d01bf70d21b6 b/.git_disabled/objects/50/467c2ae235740ae5b835cf7885d01bf70d21b6
similarity index 100%
rename from mall/.git_disabled/objects/50/467c2ae235740ae5b835cf7885d01bf70d21b6
rename to .git_disabled/objects/50/467c2ae235740ae5b835cf7885d01bf70d21b6
diff --git a/mall/.git_disabled/objects/51/0f802d4bf2ace4517b350b8f03381ea944bf5e b/.git_disabled/objects/51/0f802d4bf2ace4517b350b8f03381ea944bf5e
similarity index 100%
rename from mall/.git_disabled/objects/51/0f802d4bf2ace4517b350b8f03381ea944bf5e
rename to .git_disabled/objects/51/0f802d4bf2ace4517b350b8f03381ea944bf5e
diff --git a/mall/.git_disabled/objects/51/12d4498367130ecc5688b454aaa09ca75f9482 b/.git_disabled/objects/51/12d4498367130ecc5688b454aaa09ca75f9482
similarity index 100%
rename from mall/.git_disabled/objects/51/12d4498367130ecc5688b454aaa09ca75f9482
rename to .git_disabled/objects/51/12d4498367130ecc5688b454aaa09ca75f9482
diff --git a/mall/.git_disabled/objects/51/175aa0e1d7abc8931a4d59903c00c563dcf3f5 b/.git_disabled/objects/51/175aa0e1d7abc8931a4d59903c00c563dcf3f5
similarity index 100%
rename from mall/.git_disabled/objects/51/175aa0e1d7abc8931a4d59903c00c563dcf3f5
rename to .git_disabled/objects/51/175aa0e1d7abc8931a4d59903c00c563dcf3f5
diff --git a/mall/.git_disabled/objects/51/ab6f34a2af36b5cde2ee0a684d6aea52a71ff9 b/.git_disabled/objects/51/ab6f34a2af36b5cde2ee0a684d6aea52a71ff9
similarity index 100%
rename from mall/.git_disabled/objects/51/ab6f34a2af36b5cde2ee0a684d6aea52a71ff9
rename to .git_disabled/objects/51/ab6f34a2af36b5cde2ee0a684d6aea52a71ff9
diff --git a/mall/.git_disabled/objects/52/1c452895cc2c5c0c9f1c12e8b2cdd9314bc1e0 b/.git_disabled/objects/52/1c452895cc2c5c0c9f1c12e8b2cdd9314bc1e0
similarity index 100%
rename from mall/.git_disabled/objects/52/1c452895cc2c5c0c9f1c12e8b2cdd9314bc1e0
rename to .git_disabled/objects/52/1c452895cc2c5c0c9f1c12e8b2cdd9314bc1e0
diff --git a/mall/.git_disabled/objects/52/4d76265f6b817647d395d85d509084dd5aa5d8 b/.git_disabled/objects/52/4d76265f6b817647d395d85d509084dd5aa5d8
similarity index 100%
rename from mall/.git_disabled/objects/52/4d76265f6b817647d395d85d509084dd5aa5d8
rename to .git_disabled/objects/52/4d76265f6b817647d395d85d509084dd5aa5d8
diff --git a/mall/.git_disabled/objects/53/6a90a24880298c0e4ed5e5ea8e1b5d2e60dd73 b/.git_disabled/objects/53/6a90a24880298c0e4ed5e5ea8e1b5d2e60dd73
similarity index 100%
rename from mall/.git_disabled/objects/53/6a90a24880298c0e4ed5e5ea8e1b5d2e60dd73
rename to .git_disabled/objects/53/6a90a24880298c0e4ed5e5ea8e1b5d2e60dd73
diff --git a/mall/.git_disabled/objects/53/c906358a9af7f098f9459886d3a991e2fd070d b/.git_disabled/objects/53/c906358a9af7f098f9459886d3a991e2fd070d
similarity index 100%
rename from mall/.git_disabled/objects/53/c906358a9af7f098f9459886d3a991e2fd070d
rename to .git_disabled/objects/53/c906358a9af7f098f9459886d3a991e2fd070d
diff --git a/mall/.git_disabled/objects/54/8f595bbca62114fc5bb85d7d14d3c6f080d83e b/.git_disabled/objects/54/8f595bbca62114fc5bb85d7d14d3c6f080d83e
similarity index 100%
rename from mall/.git_disabled/objects/54/8f595bbca62114fc5bb85d7d14d3c6f080d83e
rename to .git_disabled/objects/54/8f595bbca62114fc5bb85d7d14d3c6f080d83e
diff --git a/mall/.git_disabled/objects/54/d86347606a3013d9a188bd77d0cce886ea4b6f b/.git_disabled/objects/54/d86347606a3013d9a188bd77d0cce886ea4b6f
similarity index 100%
rename from mall/.git_disabled/objects/54/d86347606a3013d9a188bd77d0cce886ea4b6f
rename to .git_disabled/objects/54/d86347606a3013d9a188bd77d0cce886ea4b6f
diff --git a/mall/.git_disabled/objects/54/fe54bd39bc0a2acd700691ed516cc9e6e53e71 b/.git_disabled/objects/54/fe54bd39bc0a2acd700691ed516cc9e6e53e71
similarity index 100%
rename from mall/.git_disabled/objects/54/fe54bd39bc0a2acd700691ed516cc9e6e53e71
rename to .git_disabled/objects/54/fe54bd39bc0a2acd700691ed516cc9e6e53e71
diff --git a/mall/.git_disabled/objects/55/9492ddcec85fe69bd3cb670a0d999c5d0bad27 b/.git_disabled/objects/55/9492ddcec85fe69bd3cb670a0d999c5d0bad27
similarity index 100%
rename from mall/.git_disabled/objects/55/9492ddcec85fe69bd3cb670a0d999c5d0bad27
rename to .git_disabled/objects/55/9492ddcec85fe69bd3cb670a0d999c5d0bad27
diff --git a/mall/.git_disabled/objects/56/a3ff4959c5003632300a77b8dc7348ddd9fe3c b/.git_disabled/objects/56/a3ff4959c5003632300a77b8dc7348ddd9fe3c
similarity index 100%
rename from mall/.git_disabled/objects/56/a3ff4959c5003632300a77b8dc7348ddd9fe3c
rename to .git_disabled/objects/56/a3ff4959c5003632300a77b8dc7348ddd9fe3c
diff --git a/mall/.git_disabled/objects/57/0c63d9ac278f962437674d0fd909aef933cbac b/.git_disabled/objects/57/0c63d9ac278f962437674d0fd909aef933cbac
similarity index 100%
rename from mall/.git_disabled/objects/57/0c63d9ac278f962437674d0fd909aef933cbac
rename to .git_disabled/objects/57/0c63d9ac278f962437674d0fd909aef933cbac
diff --git a/mall/.git_disabled/objects/57/55d728fa672faa36c79f1fad96b6547d279747 b/.git_disabled/objects/57/55d728fa672faa36c79f1fad96b6547d279747
similarity index 100%
rename from mall/.git_disabled/objects/57/55d728fa672faa36c79f1fad96b6547d279747
rename to .git_disabled/objects/57/55d728fa672faa36c79f1fad96b6547d279747
diff --git a/mall/.git_disabled/objects/57/f3d413fcfadced5f3acdb8db7be2308d75108b b/.git_disabled/objects/57/f3d413fcfadced5f3acdb8db7be2308d75108b
similarity index 100%
rename from mall/.git_disabled/objects/57/f3d413fcfadced5f3acdb8db7be2308d75108b
rename to .git_disabled/objects/57/f3d413fcfadced5f3acdb8db7be2308d75108b
diff --git a/mall/.git_disabled/objects/58/09cc954a63e3a0f5812df5282b5441e0f9249f b/.git_disabled/objects/58/09cc954a63e3a0f5812df5282b5441e0f9249f
similarity index 100%
rename from mall/.git_disabled/objects/58/09cc954a63e3a0f5812df5282b5441e0f9249f
rename to .git_disabled/objects/58/09cc954a63e3a0f5812df5282b5441e0f9249f
diff --git a/mall/.git_disabled/objects/59/6795929f5f939a614f38b1baf9ce4b5bf60e59 b/.git_disabled/objects/59/6795929f5f939a614f38b1baf9ce4b5bf60e59
similarity index 100%
rename from mall/.git_disabled/objects/59/6795929f5f939a614f38b1baf9ce4b5bf60e59
rename to .git_disabled/objects/59/6795929f5f939a614f38b1baf9ce4b5bf60e59
diff --git a/mall/.git_disabled/objects/59/b14f97b328cc856d5c0db98a9eab670e7f478a b/.git_disabled/objects/59/b14f97b328cc856d5c0db98a9eab670e7f478a
similarity index 100%
rename from mall/.git_disabled/objects/59/b14f97b328cc856d5c0db98a9eab670e7f478a
rename to .git_disabled/objects/59/b14f97b328cc856d5c0db98a9eab670e7f478a
diff --git a/mall/.git_disabled/objects/5a/3b1e4d220d219e2de574c2ee5f29e7bf3f4ebf b/.git_disabled/objects/5a/3b1e4d220d219e2de574c2ee5f29e7bf3f4ebf
similarity index 100%
rename from mall/.git_disabled/objects/5a/3b1e4d220d219e2de574c2ee5f29e7bf3f4ebf
rename to .git_disabled/objects/5a/3b1e4d220d219e2de574c2ee5f29e7bf3f4ebf
diff --git a/mall/.git_disabled/objects/5a/b7342988f40bac2093deee41cf6b385741b665 b/.git_disabled/objects/5a/b7342988f40bac2093deee41cf6b385741b665
similarity index 100%
rename from mall/.git_disabled/objects/5a/b7342988f40bac2093deee41cf6b385741b665
rename to .git_disabled/objects/5a/b7342988f40bac2093deee41cf6b385741b665
diff --git a/mall/.git_disabled/objects/5a/cab0ebe17749b444faf345ff71f12ae175b59b b/.git_disabled/objects/5a/cab0ebe17749b444faf345ff71f12ae175b59b
similarity index 100%
rename from mall/.git_disabled/objects/5a/cab0ebe17749b444faf345ff71f12ae175b59b
rename to .git_disabled/objects/5a/cab0ebe17749b444faf345ff71f12ae175b59b
diff --git a/mall/.git_disabled/objects/5b/53a47aa875985e75f384064958733ee2bb197a b/.git_disabled/objects/5b/53a47aa875985e75f384064958733ee2bb197a
similarity index 100%
rename from mall/.git_disabled/objects/5b/53a47aa875985e75f384064958733ee2bb197a
rename to .git_disabled/objects/5b/53a47aa875985e75f384064958733ee2bb197a
diff --git a/mall/.git_disabled/objects/5b/6245f64ee548982568a0f292c0c7bc38f46037 b/.git_disabled/objects/5b/6245f64ee548982568a0f292c0c7bc38f46037
similarity index 100%
rename from mall/.git_disabled/objects/5b/6245f64ee548982568a0f292c0c7bc38f46037
rename to .git_disabled/objects/5b/6245f64ee548982568a0f292c0c7bc38f46037
diff --git a/mall/.git_disabled/objects/5b/7b1eb6083ae15d9445d9ea5e2caaaf8b09ac92 b/.git_disabled/objects/5b/7b1eb6083ae15d9445d9ea5e2caaaf8b09ac92
similarity index 100%
rename from mall/.git_disabled/objects/5b/7b1eb6083ae15d9445d9ea5e2caaaf8b09ac92
rename to .git_disabled/objects/5b/7b1eb6083ae15d9445d9ea5e2caaaf8b09ac92
diff --git a/mall/.git_disabled/objects/5c/02cd563f92a1ffdca9b71566e2bd43e85a5b13 b/.git_disabled/objects/5c/02cd563f92a1ffdca9b71566e2bd43e85a5b13
similarity index 100%
rename from mall/.git_disabled/objects/5c/02cd563f92a1ffdca9b71566e2bd43e85a5b13
rename to .git_disabled/objects/5c/02cd563f92a1ffdca9b71566e2bd43e85a5b13
diff --git a/mall/.git_disabled/objects/5c/113dc318007c89596dcdf652a15bd07f54bdcb b/.git_disabled/objects/5c/113dc318007c89596dcdf652a15bd07f54bdcb
similarity index 100%
rename from mall/.git_disabled/objects/5c/113dc318007c89596dcdf652a15bd07f54bdcb
rename to .git_disabled/objects/5c/113dc318007c89596dcdf652a15bd07f54bdcb
diff --git a/mall/.git_disabled/objects/5c/72f5223da44bd5c47cb7828fb211f294f2120b b/.git_disabled/objects/5c/72f5223da44bd5c47cb7828fb211f294f2120b
similarity index 100%
rename from mall/.git_disabled/objects/5c/72f5223da44bd5c47cb7828fb211f294f2120b
rename to .git_disabled/objects/5c/72f5223da44bd5c47cb7828fb211f294f2120b
diff --git a/mall/.git_disabled/objects/5c/f252a2d31075feb36484d24e58fd4269d712f8 b/.git_disabled/objects/5c/f252a2d31075feb36484d24e58fd4269d712f8
similarity index 100%
rename from mall/.git_disabled/objects/5c/f252a2d31075feb36484d24e58fd4269d712f8
rename to .git_disabled/objects/5c/f252a2d31075feb36484d24e58fd4269d712f8
diff --git a/mall/.git_disabled/objects/5e/053b497c1a56047817dcff8ad6a35ca071e3b0 b/.git_disabled/objects/5e/053b497c1a56047817dcff8ad6a35ca071e3b0
similarity index 100%
rename from mall/.git_disabled/objects/5e/053b497c1a56047817dcff8ad6a35ca071e3b0
rename to .git_disabled/objects/5e/053b497c1a56047817dcff8ad6a35ca071e3b0
diff --git a/mall/.git_disabled/objects/5e/5c7d69ff81ce6d8558f3633e8b072dc8d04083 b/.git_disabled/objects/5e/5c7d69ff81ce6d8558f3633e8b072dc8d04083
similarity index 100%
rename from mall/.git_disabled/objects/5e/5c7d69ff81ce6d8558f3633e8b072dc8d04083
rename to .git_disabled/objects/5e/5c7d69ff81ce6d8558f3633e8b072dc8d04083
diff --git a/mall/.git_disabled/objects/5e/7fae15d66f486f1aa2a9528dad44152d64f59f b/.git_disabled/objects/5e/7fae15d66f486f1aa2a9528dad44152d64f59f
similarity index 100%
rename from mall/.git_disabled/objects/5e/7fae15d66f486f1aa2a9528dad44152d64f59f
rename to .git_disabled/objects/5e/7fae15d66f486f1aa2a9528dad44152d64f59f
diff --git a/mall/.git_disabled/objects/5f/221961b2557b4779f0fab49ba90a03745f5ebc b/.git_disabled/objects/5f/221961b2557b4779f0fab49ba90a03745f5ebc
similarity index 100%
rename from mall/.git_disabled/objects/5f/221961b2557b4779f0fab49ba90a03745f5ebc
rename to .git_disabled/objects/5f/221961b2557b4779f0fab49ba90a03745f5ebc
diff --git a/mall/.git_disabled/objects/5f/4b31160507f8be954fe55e596f9ea8959a849f b/.git_disabled/objects/5f/4b31160507f8be954fe55e596f9ea8959a849f
similarity index 100%
rename from mall/.git_disabled/objects/5f/4b31160507f8be954fe55e596f9ea8959a849f
rename to .git_disabled/objects/5f/4b31160507f8be954fe55e596f9ea8959a849f
diff --git a/mall/.git_disabled/objects/5f/7dd2387281a8c1203d0741805d7f78d13899ad b/.git_disabled/objects/5f/7dd2387281a8c1203d0741805d7f78d13899ad
similarity index 100%
rename from mall/.git_disabled/objects/5f/7dd2387281a8c1203d0741805d7f78d13899ad
rename to .git_disabled/objects/5f/7dd2387281a8c1203d0741805d7f78d13899ad
diff --git a/mall/.git_disabled/objects/5f/d896a2e8e1a97a9f9a3887f10abda025ca72c0 b/.git_disabled/objects/5f/d896a2e8e1a97a9f9a3887f10abda025ca72c0
similarity index 100%
rename from mall/.git_disabled/objects/5f/d896a2e8e1a97a9f9a3887f10abda025ca72c0
rename to .git_disabled/objects/5f/d896a2e8e1a97a9f9a3887f10abda025ca72c0
diff --git a/mall/.git_disabled/objects/5f/f409d6a268c58de83dfacf23838346fa007e40 b/.git_disabled/objects/5f/f409d6a268c58de83dfacf23838346fa007e40
similarity index 100%
rename from mall/.git_disabled/objects/5f/f409d6a268c58de83dfacf23838346fa007e40
rename to .git_disabled/objects/5f/f409d6a268c58de83dfacf23838346fa007e40
diff --git a/mall/.git_disabled/objects/60/054c43c026a9344fa1ee448cd24063356de41b b/.git_disabled/objects/60/054c43c026a9344fa1ee448cd24063356de41b
similarity index 100%
rename from mall/.git_disabled/objects/60/054c43c026a9344fa1ee448cd24063356de41b
rename to .git_disabled/objects/60/054c43c026a9344fa1ee448cd24063356de41b
diff --git a/mall/.git_disabled/objects/60/3f4f1fff51879ce2cb906a71280df92e5754da b/.git_disabled/objects/60/3f4f1fff51879ce2cb906a71280df92e5754da
similarity index 100%
rename from mall/.git_disabled/objects/60/3f4f1fff51879ce2cb906a71280df92e5754da
rename to .git_disabled/objects/60/3f4f1fff51879ce2cb906a71280df92e5754da
diff --git a/mall/.git_disabled/objects/60/5e19453853ef8243b54bbef0b19c6b87d790d4 b/.git_disabled/objects/60/5e19453853ef8243b54bbef0b19c6b87d790d4
similarity index 100%
rename from mall/.git_disabled/objects/60/5e19453853ef8243b54bbef0b19c6b87d790d4
rename to .git_disabled/objects/60/5e19453853ef8243b54bbef0b19c6b87d790d4
diff --git a/mall/.git_disabled/objects/62/61795fcaf6b35cbb4e92b8969f35ae60b508c9 b/.git_disabled/objects/62/61795fcaf6b35cbb4e92b8969f35ae60b508c9
similarity index 100%
rename from mall/.git_disabled/objects/62/61795fcaf6b35cbb4e92b8969f35ae60b508c9
rename to .git_disabled/objects/62/61795fcaf6b35cbb4e92b8969f35ae60b508c9
diff --git a/mall/.git_disabled/objects/63/19b78bbb0266d9a50198ff043e82703c79a52a b/.git_disabled/objects/63/19b78bbb0266d9a50198ff043e82703c79a52a
similarity index 100%
rename from mall/.git_disabled/objects/63/19b78bbb0266d9a50198ff043e82703c79a52a
rename to .git_disabled/objects/63/19b78bbb0266d9a50198ff043e82703c79a52a
diff --git a/mall/.git_disabled/objects/63/b4a9ad4c99374b9942c45a0d61bd8cd9b98c51 b/.git_disabled/objects/63/b4a9ad4c99374b9942c45a0d61bd8cd9b98c51
similarity index 100%
rename from mall/.git_disabled/objects/63/b4a9ad4c99374b9942c45a0d61bd8cd9b98c51
rename to .git_disabled/objects/63/b4a9ad4c99374b9942c45a0d61bd8cd9b98c51
diff --git a/mall/.git_disabled/objects/64/8e7cc00b47deccbd2bde65c56a521dc3660377 b/.git_disabled/objects/64/8e7cc00b47deccbd2bde65c56a521dc3660377
similarity index 100%
rename from mall/.git_disabled/objects/64/8e7cc00b47deccbd2bde65c56a521dc3660377
rename to .git_disabled/objects/64/8e7cc00b47deccbd2bde65c56a521dc3660377
diff --git a/mall/.git_disabled/objects/64/918dcb2c9ae7032a0739891e2c02e49346cf8a b/.git_disabled/objects/64/918dcb2c9ae7032a0739891e2c02e49346cf8a
similarity index 100%
rename from mall/.git_disabled/objects/64/918dcb2c9ae7032a0739891e2c02e49346cf8a
rename to .git_disabled/objects/64/918dcb2c9ae7032a0739891e2c02e49346cf8a
diff --git a/mall/.git_disabled/objects/64/f49a36e2a401b586d5888f03dbb6ef4e5e58df b/.git_disabled/objects/64/f49a36e2a401b586d5888f03dbb6ef4e5e58df
similarity index 100%
rename from mall/.git_disabled/objects/64/f49a36e2a401b586d5888f03dbb6ef4e5e58df
rename to .git_disabled/objects/64/f49a36e2a401b586d5888f03dbb6ef4e5e58df
diff --git a/mall/.git_disabled/objects/65/6210209436fe01585be84e9b05f984ee1958a9 b/.git_disabled/objects/65/6210209436fe01585be84e9b05f984ee1958a9
similarity index 100%
rename from mall/.git_disabled/objects/65/6210209436fe01585be84e9b05f984ee1958a9
rename to .git_disabled/objects/65/6210209436fe01585be84e9b05f984ee1958a9
diff --git a/mall/.git_disabled/objects/65/6d76dd651392991879212acbc8fd1885d143be b/.git_disabled/objects/65/6d76dd651392991879212acbc8fd1885d143be
similarity index 100%
rename from mall/.git_disabled/objects/65/6d76dd651392991879212acbc8fd1885d143be
rename to .git_disabled/objects/65/6d76dd651392991879212acbc8fd1885d143be
diff --git a/mall/.git_disabled/objects/65/c5b089e2075ce80490dfe6b95681c5ee2fa916 b/.git_disabled/objects/65/c5b089e2075ce80490dfe6b95681c5ee2fa916
similarity index 100%
rename from mall/.git_disabled/objects/65/c5b089e2075ce80490dfe6b95681c5ee2fa916
rename to .git_disabled/objects/65/c5b089e2075ce80490dfe6b95681c5ee2fa916
diff --git a/mall/.git_disabled/objects/66/aa909193b008842948589adf6f302840aa6efc b/.git_disabled/objects/66/aa909193b008842948589adf6f302840aa6efc
similarity index 100%
rename from mall/.git_disabled/objects/66/aa909193b008842948589adf6f302840aa6efc
rename to .git_disabled/objects/66/aa909193b008842948589adf6f302840aa6efc
diff --git a/mall/.git_disabled/objects/67/c6133de7898674c9531ba23c820122f2aaa0ca b/.git_disabled/objects/67/c6133de7898674c9531ba23c820122f2aaa0ca
similarity index 100%
rename from mall/.git_disabled/objects/67/c6133de7898674c9531ba23c820122f2aaa0ca
rename to .git_disabled/objects/67/c6133de7898674c9531ba23c820122f2aaa0ca
diff --git a/mall/.git_disabled/objects/67/ef2d6d6da3c4070d286059b9add37be5aaac97 b/.git_disabled/objects/67/ef2d6d6da3c4070d286059b9add37be5aaac97
similarity index 100%
rename from mall/.git_disabled/objects/67/ef2d6d6da3c4070d286059b9add37be5aaac97
rename to .git_disabled/objects/67/ef2d6d6da3c4070d286059b9add37be5aaac97
diff --git a/mall/.git_disabled/objects/69/34603289b5a2c3369b03d428b6bc28e348c61e b/.git_disabled/objects/69/34603289b5a2c3369b03d428b6bc28e348c61e
similarity index 100%
rename from mall/.git_disabled/objects/69/34603289b5a2c3369b03d428b6bc28e348c61e
rename to .git_disabled/objects/69/34603289b5a2c3369b03d428b6bc28e348c61e
diff --git a/mall/.git_disabled/objects/69/3a201a058a51b23180e19de68cbd5a3dd54c58 b/.git_disabled/objects/69/3a201a058a51b23180e19de68cbd5a3dd54c58
similarity index 100%
rename from mall/.git_disabled/objects/69/3a201a058a51b23180e19de68cbd5a3dd54c58
rename to .git_disabled/objects/69/3a201a058a51b23180e19de68cbd5a3dd54c58
diff --git a/mall/.git_disabled/objects/69/b5015c815bebd7813a4856b7246569458a2416 b/.git_disabled/objects/69/b5015c815bebd7813a4856b7246569458a2416
similarity index 100%
rename from mall/.git_disabled/objects/69/b5015c815bebd7813a4856b7246569458a2416
rename to .git_disabled/objects/69/b5015c815bebd7813a4856b7246569458a2416
diff --git a/mall/.git_disabled/objects/6a/4104b80b2cf0c91383c9702fb381e29bfc1042 b/.git_disabled/objects/6a/4104b80b2cf0c91383c9702fb381e29bfc1042
similarity index 100%
rename from mall/.git_disabled/objects/6a/4104b80b2cf0c91383c9702fb381e29bfc1042
rename to .git_disabled/objects/6a/4104b80b2cf0c91383c9702fb381e29bfc1042
diff --git a/mall/.git_disabled/objects/6a/54f7eef61252a21108c1d2e3e8128ccb949278 b/.git_disabled/objects/6a/54f7eef61252a21108c1d2e3e8128ccb949278
similarity index 100%
rename from mall/.git_disabled/objects/6a/54f7eef61252a21108c1d2e3e8128ccb949278
rename to .git_disabled/objects/6a/54f7eef61252a21108c1d2e3e8128ccb949278
diff --git a/mall/.git_disabled/objects/6a/96b7f56b19f9e88b866372f1142087d9b8a4db b/.git_disabled/objects/6a/96b7f56b19f9e88b866372f1142087d9b8a4db
similarity index 100%
rename from mall/.git_disabled/objects/6a/96b7f56b19f9e88b866372f1142087d9b8a4db
rename to .git_disabled/objects/6a/96b7f56b19f9e88b866372f1142087d9b8a4db
diff --git a/mall/.git_disabled/objects/6a/c2a9c762cc4781e3f20e3e4b1a12e220d743d0 b/.git_disabled/objects/6a/c2a9c762cc4781e3f20e3e4b1a12e220d743d0
similarity index 100%
rename from mall/.git_disabled/objects/6a/c2a9c762cc4781e3f20e3e4b1a12e220d743d0
rename to .git_disabled/objects/6a/c2a9c762cc4781e3f20e3e4b1a12e220d743d0
diff --git a/mall/.git_disabled/objects/6b/5318e6a449374c05e9fdbf297d036fcdcdcc86 b/.git_disabled/objects/6b/5318e6a449374c05e9fdbf297d036fcdcdcc86
similarity index 100%
rename from mall/.git_disabled/objects/6b/5318e6a449374c05e9fdbf297d036fcdcdcc86
rename to .git_disabled/objects/6b/5318e6a449374c05e9fdbf297d036fcdcdcc86
diff --git a/mall/.git_disabled/objects/6b/683279322bfa8f3fb914ba3991d06e0d81be45 b/.git_disabled/objects/6b/683279322bfa8f3fb914ba3991d06e0d81be45
similarity index 100%
rename from mall/.git_disabled/objects/6b/683279322bfa8f3fb914ba3991d06e0d81be45
rename to .git_disabled/objects/6b/683279322bfa8f3fb914ba3991d06e0d81be45
diff --git a/mall/.git_disabled/objects/6b/c9be2a31f3a24e1f864c868780bb409c64e8d4 b/.git_disabled/objects/6b/c9be2a31f3a24e1f864c868780bb409c64e8d4
similarity index 100%
rename from mall/.git_disabled/objects/6b/c9be2a31f3a24e1f864c868780bb409c64e8d4
rename to .git_disabled/objects/6b/c9be2a31f3a24e1f864c868780bb409c64e8d4
diff --git a/mall/.git_disabled/objects/6c/95008ccd1dd7bb737578b08aab3b6e2aa52172 b/.git_disabled/objects/6c/95008ccd1dd7bb737578b08aab3b6e2aa52172
similarity index 100%
rename from mall/.git_disabled/objects/6c/95008ccd1dd7bb737578b08aab3b6e2aa52172
rename to .git_disabled/objects/6c/95008ccd1dd7bb737578b08aab3b6e2aa52172
diff --git a/mall/.git_disabled/objects/6c/ac3ba57621be2232b40b800de5bcbb37c80f01 b/.git_disabled/objects/6c/ac3ba57621be2232b40b800de5bcbb37c80f01
similarity index 100%
rename from mall/.git_disabled/objects/6c/ac3ba57621be2232b40b800de5bcbb37c80f01
rename to .git_disabled/objects/6c/ac3ba57621be2232b40b800de5bcbb37c80f01
diff --git a/mall/.git_disabled/objects/6c/bb55c7bafff1accf0273f903d87ea28cb1c5df b/.git_disabled/objects/6c/bb55c7bafff1accf0273f903d87ea28cb1c5df
similarity index 100%
rename from mall/.git_disabled/objects/6c/bb55c7bafff1accf0273f903d87ea28cb1c5df
rename to .git_disabled/objects/6c/bb55c7bafff1accf0273f903d87ea28cb1c5df
diff --git a/mall/.git_disabled/objects/6d/1e1a82518f16b49369a492ac964712a7dc3769 b/.git_disabled/objects/6d/1e1a82518f16b49369a492ac964712a7dc3769
similarity index 100%
rename from mall/.git_disabled/objects/6d/1e1a82518f16b49369a492ac964712a7dc3769
rename to .git_disabled/objects/6d/1e1a82518f16b49369a492ac964712a7dc3769
diff --git a/mall/.git_disabled/objects/6d/9d4ec341bc4609940eb251a7b5010c5ec4b34e b/.git_disabled/objects/6d/9d4ec341bc4609940eb251a7b5010c5ec4b34e
similarity index 100%
rename from mall/.git_disabled/objects/6d/9d4ec341bc4609940eb251a7b5010c5ec4b34e
rename to .git_disabled/objects/6d/9d4ec341bc4609940eb251a7b5010c5ec4b34e
diff --git a/mall/.git_disabled/objects/6d/cb725787d340db48780cc4f0659f09aeec17e7 b/.git_disabled/objects/6d/cb725787d340db48780cc4f0659f09aeec17e7
similarity index 100%
rename from mall/.git_disabled/objects/6d/cb725787d340db48780cc4f0659f09aeec17e7
rename to .git_disabled/objects/6d/cb725787d340db48780cc4f0659f09aeec17e7
diff --git a/mall/.git_disabled/objects/6e/9f5b11699788559819d1c1682c46560cf6aa4e b/.git_disabled/objects/6e/9f5b11699788559819d1c1682c46560cf6aa4e
similarity index 100%
rename from mall/.git_disabled/objects/6e/9f5b11699788559819d1c1682c46560cf6aa4e
rename to .git_disabled/objects/6e/9f5b11699788559819d1c1682c46560cf6aa4e
diff --git a/mall/.git_disabled/objects/6e/a10712ca96453ab337e1e8e0ea417d3d38a74a b/.git_disabled/objects/6e/a10712ca96453ab337e1e8e0ea417d3d38a74a
similarity index 100%
rename from mall/.git_disabled/objects/6e/a10712ca96453ab337e1e8e0ea417d3d38a74a
rename to .git_disabled/objects/6e/a10712ca96453ab337e1e8e0ea417d3d38a74a
diff --git a/mall/.git_disabled/objects/6f/1065ce9604fd91accc0dc29c2e1daa007e0d3c b/.git_disabled/objects/6f/1065ce9604fd91accc0dc29c2e1daa007e0d3c
similarity index 100%
rename from mall/.git_disabled/objects/6f/1065ce9604fd91accc0dc29c2e1daa007e0d3c
rename to .git_disabled/objects/6f/1065ce9604fd91accc0dc29c2e1daa007e0d3c
diff --git a/mall/.git_disabled/objects/6f/62924f1e1d130c2c8da85be00931f173817b93 b/.git_disabled/objects/6f/62924f1e1d130c2c8da85be00931f173817b93
similarity index 100%
rename from mall/.git_disabled/objects/6f/62924f1e1d130c2c8da85be00931f173817b93
rename to .git_disabled/objects/6f/62924f1e1d130c2c8da85be00931f173817b93
diff --git a/mall/.git_disabled/objects/6f/638a238362b20064bda9d86d8876d1a7c3d76b b/.git_disabled/objects/6f/638a238362b20064bda9d86d8876d1a7c3d76b
similarity index 100%
rename from mall/.git_disabled/objects/6f/638a238362b20064bda9d86d8876d1a7c3d76b
rename to .git_disabled/objects/6f/638a238362b20064bda9d86d8876d1a7c3d76b
diff --git a/mall/.git_disabled/objects/6f/f5625b558461a2789cb48e081cb43467bba145 b/.git_disabled/objects/6f/f5625b558461a2789cb48e081cb43467bba145
similarity index 100%
rename from mall/.git_disabled/objects/6f/f5625b558461a2789cb48e081cb43467bba145
rename to .git_disabled/objects/6f/f5625b558461a2789cb48e081cb43467bba145
diff --git a/mall/.git_disabled/objects/70/746bcefc6597cb15458c3737012b90eaf931b4 b/.git_disabled/objects/70/746bcefc6597cb15458c3737012b90eaf931b4
similarity index 100%
rename from mall/.git_disabled/objects/70/746bcefc6597cb15458c3737012b90eaf931b4
rename to .git_disabled/objects/70/746bcefc6597cb15458c3737012b90eaf931b4
diff --git a/mall/.git_disabled/objects/70/9e4fd028183514fe16622b0195c5c966548b67 b/.git_disabled/objects/70/9e4fd028183514fe16622b0195c5c966548b67
similarity index 100%
rename from mall/.git_disabled/objects/70/9e4fd028183514fe16622b0195c5c966548b67
rename to .git_disabled/objects/70/9e4fd028183514fe16622b0195c5c966548b67
diff --git a/mall/.git_disabled/objects/71/4bb98d46ceb983f78c238e56bf39f179ffcd4b b/.git_disabled/objects/71/4bb98d46ceb983f78c238e56bf39f179ffcd4b
similarity index 100%
rename from mall/.git_disabled/objects/71/4bb98d46ceb983f78c238e56bf39f179ffcd4b
rename to .git_disabled/objects/71/4bb98d46ceb983f78c238e56bf39f179ffcd4b
diff --git a/mall/.git_disabled/objects/71/5e894fe682243e752ed67ddcd3608c2a2bc058 b/.git_disabled/objects/71/5e894fe682243e752ed67ddcd3608c2a2bc058
similarity index 100%
rename from mall/.git_disabled/objects/71/5e894fe682243e752ed67ddcd3608c2a2bc058
rename to .git_disabled/objects/71/5e894fe682243e752ed67ddcd3608c2a2bc058
diff --git a/mall/.git_disabled/objects/72/0ba6818b97e60a491ea02fe71a71e79ee6c697 b/.git_disabled/objects/72/0ba6818b97e60a491ea02fe71a71e79ee6c697
similarity index 100%
rename from mall/.git_disabled/objects/72/0ba6818b97e60a491ea02fe71a71e79ee6c697
rename to .git_disabled/objects/72/0ba6818b97e60a491ea02fe71a71e79ee6c697
diff --git a/mall/.git_disabled/objects/72/c1505dd7fec1e1e5ae6f220209499b0c5df30e b/.git_disabled/objects/72/c1505dd7fec1e1e5ae6f220209499b0c5df30e
similarity index 100%
rename from mall/.git_disabled/objects/72/c1505dd7fec1e1e5ae6f220209499b0c5df30e
rename to .git_disabled/objects/72/c1505dd7fec1e1e5ae6f220209499b0c5df30e
diff --git a/mall/.git_disabled/objects/73/18fbf1f605ca6b67232d3346b81a95d67dc008 b/.git_disabled/objects/73/18fbf1f605ca6b67232d3346b81a95d67dc008
similarity index 100%
rename from mall/.git_disabled/objects/73/18fbf1f605ca6b67232d3346b81a95d67dc008
rename to .git_disabled/objects/73/18fbf1f605ca6b67232d3346b81a95d67dc008
diff --git a/mall/.git_disabled/objects/73/471b7810b08345cc8d1a7525be6c9467bc8f3e b/.git_disabled/objects/73/471b7810b08345cc8d1a7525be6c9467bc8f3e
similarity index 100%
rename from mall/.git_disabled/objects/73/471b7810b08345cc8d1a7525be6c9467bc8f3e
rename to .git_disabled/objects/73/471b7810b08345cc8d1a7525be6c9467bc8f3e
diff --git a/mall/.git_disabled/objects/73/498128dde533e8984c8bc2ebcca43253e46fb6 b/.git_disabled/objects/73/498128dde533e8984c8bc2ebcca43253e46fb6
similarity index 100%
rename from mall/.git_disabled/objects/73/498128dde533e8984c8bc2ebcca43253e46fb6
rename to .git_disabled/objects/73/498128dde533e8984c8bc2ebcca43253e46fb6
diff --git a/mall/.git_disabled/objects/73/feed5a38516b3f0361437821d3ce0ad9748e1e b/.git_disabled/objects/73/feed5a38516b3f0361437821d3ce0ad9748e1e
similarity index 100%
rename from mall/.git_disabled/objects/73/feed5a38516b3f0361437821d3ce0ad9748e1e
rename to .git_disabled/objects/73/feed5a38516b3f0361437821d3ce0ad9748e1e
diff --git a/mall/.git_disabled/objects/75/3ffcb9c3fbeed20cdef4117ed80d32ed37b6fc b/.git_disabled/objects/75/3ffcb9c3fbeed20cdef4117ed80d32ed37b6fc
similarity index 100%
rename from mall/.git_disabled/objects/75/3ffcb9c3fbeed20cdef4117ed80d32ed37b6fc
rename to .git_disabled/objects/75/3ffcb9c3fbeed20cdef4117ed80d32ed37b6fc
diff --git a/mall/.git_disabled/objects/75/fad97d5dbee5a32ac586cbfee2d8e1d73dd1f2 b/.git_disabled/objects/75/fad97d5dbee5a32ac586cbfee2d8e1d73dd1f2
similarity index 100%
rename from mall/.git_disabled/objects/75/fad97d5dbee5a32ac586cbfee2d8e1d73dd1f2
rename to .git_disabled/objects/75/fad97d5dbee5a32ac586cbfee2d8e1d73dd1f2
diff --git a/mall/.git_disabled/objects/76/5ececbfc6feced66bbd9cf25ee079dee6be576 b/.git_disabled/objects/76/5ececbfc6feced66bbd9cf25ee079dee6be576
similarity index 100%
rename from mall/.git_disabled/objects/76/5ececbfc6feced66bbd9cf25ee079dee6be576
rename to .git_disabled/objects/76/5ececbfc6feced66bbd9cf25ee079dee6be576
diff --git a/mall/.git_disabled/objects/76/eb96ec0c1c7fb3618e30068060463074f087fb b/.git_disabled/objects/76/eb96ec0c1c7fb3618e30068060463074f087fb
similarity index 100%
rename from mall/.git_disabled/objects/76/eb96ec0c1c7fb3618e30068060463074f087fb
rename to .git_disabled/objects/76/eb96ec0c1c7fb3618e30068060463074f087fb
diff --git a/mall/.git_disabled/objects/77/2bc57e30e479d2b08ed51bc99a28fc361896ad b/.git_disabled/objects/77/2bc57e30e479d2b08ed51bc99a28fc361896ad
similarity index 100%
rename from mall/.git_disabled/objects/77/2bc57e30e479d2b08ed51bc99a28fc361896ad
rename to .git_disabled/objects/77/2bc57e30e479d2b08ed51bc99a28fc361896ad
diff --git a/mall/.git_disabled/objects/77/bb4026e862ff0f7cf8d0992a6dee538c948d0a b/.git_disabled/objects/77/bb4026e862ff0f7cf8d0992a6dee538c948d0a
similarity index 100%
rename from mall/.git_disabled/objects/77/bb4026e862ff0f7cf8d0992a6dee538c948d0a
rename to .git_disabled/objects/77/bb4026e862ff0f7cf8d0992a6dee538c948d0a
diff --git a/mall/.git_disabled/objects/77/c4757ac3ffde50f67703a7e6ecfc555372b2a6 b/.git_disabled/objects/77/c4757ac3ffde50f67703a7e6ecfc555372b2a6
similarity index 100%
rename from mall/.git_disabled/objects/77/c4757ac3ffde50f67703a7e6ecfc555372b2a6
rename to .git_disabled/objects/77/c4757ac3ffde50f67703a7e6ecfc555372b2a6
diff --git a/mall/.git_disabled/objects/78/a44cc8caf24ff9c8ac488781edd6132561e1f8 b/.git_disabled/objects/78/a44cc8caf24ff9c8ac488781edd6132561e1f8
similarity index 100%
rename from mall/.git_disabled/objects/78/a44cc8caf24ff9c8ac488781edd6132561e1f8
rename to .git_disabled/objects/78/a44cc8caf24ff9c8ac488781edd6132561e1f8
diff --git a/mall/.git_disabled/objects/78/b849e30d43974d8ccf126680001bc7f0551fd1 b/.git_disabled/objects/78/b849e30d43974d8ccf126680001bc7f0551fd1
similarity index 100%
rename from mall/.git_disabled/objects/78/b849e30d43974d8ccf126680001bc7f0551fd1
rename to .git_disabled/objects/78/b849e30d43974d8ccf126680001bc7f0551fd1
diff --git a/mall/.git_disabled/objects/79/95f6f9c21a49bc45fa9f0621fb446e425ef17d b/.git_disabled/objects/79/95f6f9c21a49bc45fa9f0621fb446e425ef17d
similarity index 100%
rename from mall/.git_disabled/objects/79/95f6f9c21a49bc45fa9f0621fb446e425ef17d
rename to .git_disabled/objects/79/95f6f9c21a49bc45fa9f0621fb446e425ef17d
diff --git a/mall/.git_disabled/objects/7b/2c4d5633b321df02c1d0f57da7e0f5348b5f78 b/.git_disabled/objects/7b/2c4d5633b321df02c1d0f57da7e0f5348b5f78
similarity index 100%
rename from mall/.git_disabled/objects/7b/2c4d5633b321df02c1d0f57da7e0f5348b5f78
rename to .git_disabled/objects/7b/2c4d5633b321df02c1d0f57da7e0f5348b5f78
diff --git a/mall/.git_disabled/objects/7b/5377944d3ac36cffbef1d045c6c8ab7775cfdd b/.git_disabled/objects/7b/5377944d3ac36cffbef1d045c6c8ab7775cfdd
similarity index 100%
rename from mall/.git_disabled/objects/7b/5377944d3ac36cffbef1d045c6c8ab7775cfdd
rename to .git_disabled/objects/7b/5377944d3ac36cffbef1d045c6c8ab7775cfdd
diff --git a/mall/.git_disabled/objects/7b/7b63c22f42c0669dde59b15f298bf7ff09e6f6 b/.git_disabled/objects/7b/7b63c22f42c0669dde59b15f298bf7ff09e6f6
similarity index 100%
rename from mall/.git_disabled/objects/7b/7b63c22f42c0669dde59b15f298bf7ff09e6f6
rename to .git_disabled/objects/7b/7b63c22f42c0669dde59b15f298bf7ff09e6f6
diff --git a/mall/.git_disabled/objects/7b/847032f10b09117ce92ccdec99ce36cb7f470d b/.git_disabled/objects/7b/847032f10b09117ce92ccdec99ce36cb7f470d
similarity index 100%
rename from mall/.git_disabled/objects/7b/847032f10b09117ce92ccdec99ce36cb7f470d
rename to .git_disabled/objects/7b/847032f10b09117ce92ccdec99ce36cb7f470d
diff --git a/mall/.git_disabled/objects/7b/9094c5bc90e051aab7e764b199279aa3902da6 b/.git_disabled/objects/7b/9094c5bc90e051aab7e764b199279aa3902da6
similarity index 100%
rename from mall/.git_disabled/objects/7b/9094c5bc90e051aab7e764b199279aa3902da6
rename to .git_disabled/objects/7b/9094c5bc90e051aab7e764b199279aa3902da6
diff --git a/mall/.git_disabled/objects/7b/dd7157abc9507ed8222d7a35c10c3b76dc8556 b/.git_disabled/objects/7b/dd7157abc9507ed8222d7a35c10c3b76dc8556
similarity index 100%
rename from mall/.git_disabled/objects/7b/dd7157abc9507ed8222d7a35c10c3b76dc8556
rename to .git_disabled/objects/7b/dd7157abc9507ed8222d7a35c10c3b76dc8556
diff --git a/mall/.git_disabled/objects/7c/11504fac038b2b77cf91e17d7d5bdf62804f91 b/.git_disabled/objects/7c/11504fac038b2b77cf91e17d7d5bdf62804f91
similarity index 100%
rename from mall/.git_disabled/objects/7c/11504fac038b2b77cf91e17d7d5bdf62804f91
rename to .git_disabled/objects/7c/11504fac038b2b77cf91e17d7d5bdf62804f91
diff --git a/mall/.git_disabled/objects/7d/275fa1bba484dbf2d53cae5df74b38dd8c4652 b/.git_disabled/objects/7d/275fa1bba484dbf2d53cae5df74b38dd8c4652
similarity index 100%
rename from mall/.git_disabled/objects/7d/275fa1bba484dbf2d53cae5df74b38dd8c4652
rename to .git_disabled/objects/7d/275fa1bba484dbf2d53cae5df74b38dd8c4652
diff --git a/mall/.git_disabled/objects/7d/4d09094bc4c86a66ee02dba2acd91f49f9336c b/.git_disabled/objects/7d/4d09094bc4c86a66ee02dba2acd91f49f9336c
similarity index 100%
rename from mall/.git_disabled/objects/7d/4d09094bc4c86a66ee02dba2acd91f49f9336c
rename to .git_disabled/objects/7d/4d09094bc4c86a66ee02dba2acd91f49f9336c
diff --git a/mall/.git_disabled/objects/7d/4f8c11ddd4e5120d8f1e745601462c097a6bee b/.git_disabled/objects/7d/4f8c11ddd4e5120d8f1e745601462c097a6bee
similarity index 100%
rename from mall/.git_disabled/objects/7d/4f8c11ddd4e5120d8f1e745601462c097a6bee
rename to .git_disabled/objects/7d/4f8c11ddd4e5120d8f1e745601462c097a6bee
diff --git a/mall/.git_disabled/objects/7d/6e20f8c4946bafc9227cdb37202c03414a3270 b/.git_disabled/objects/7d/6e20f8c4946bafc9227cdb37202c03414a3270
similarity index 100%
rename from mall/.git_disabled/objects/7d/6e20f8c4946bafc9227cdb37202c03414a3270
rename to .git_disabled/objects/7d/6e20f8c4946bafc9227cdb37202c03414a3270
diff --git a/mall/.git_disabled/objects/7d/8dbe2197609d211bb6b8abedb1fb56d0eb1a41 b/.git_disabled/objects/7d/8dbe2197609d211bb6b8abedb1fb56d0eb1a41
similarity index 100%
rename from mall/.git_disabled/objects/7d/8dbe2197609d211bb6b8abedb1fb56d0eb1a41
rename to .git_disabled/objects/7d/8dbe2197609d211bb6b8abedb1fb56d0eb1a41
diff --git a/mall/.git_disabled/objects/7d/ae38f8bdb94085dfa8bf29620a28445f3233f1 b/.git_disabled/objects/7d/ae38f8bdb94085dfa8bf29620a28445f3233f1
similarity index 100%
rename from mall/.git_disabled/objects/7d/ae38f8bdb94085dfa8bf29620a28445f3233f1
rename to .git_disabled/objects/7d/ae38f8bdb94085dfa8bf29620a28445f3233f1
diff --git a/mall/.git_disabled/objects/7d/dce6fa57afa4b7748224367b142e08d255f5b1 b/.git_disabled/objects/7d/dce6fa57afa4b7748224367b142e08d255f5b1
similarity index 100%
rename from mall/.git_disabled/objects/7d/dce6fa57afa4b7748224367b142e08d255f5b1
rename to .git_disabled/objects/7d/dce6fa57afa4b7748224367b142e08d255f5b1
diff --git a/mall/.git_disabled/objects/7e/c5599574ebede5071d844e3a5b9d0ed87bea93 b/.git_disabled/objects/7e/c5599574ebede5071d844e3a5b9d0ed87bea93
similarity index 100%
rename from mall/.git_disabled/objects/7e/c5599574ebede5071d844e3a5b9d0ed87bea93
rename to .git_disabled/objects/7e/c5599574ebede5071d844e3a5b9d0ed87bea93
diff --git a/mall/.git_disabled/objects/7f/4e8d976a907ca99dbe726121d6c8198ff6a522 b/.git_disabled/objects/7f/4e8d976a907ca99dbe726121d6c8198ff6a522
similarity index 100%
rename from mall/.git_disabled/objects/7f/4e8d976a907ca99dbe726121d6c8198ff6a522
rename to .git_disabled/objects/7f/4e8d976a907ca99dbe726121d6c8198ff6a522
diff --git a/mall/.git_disabled/objects/80/64b2bc935e020bdcf83763977937bbb1ce6eb0 b/.git_disabled/objects/80/64b2bc935e020bdcf83763977937bbb1ce6eb0
similarity index 100%
rename from mall/.git_disabled/objects/80/64b2bc935e020bdcf83763977937bbb1ce6eb0
rename to .git_disabled/objects/80/64b2bc935e020bdcf83763977937bbb1ce6eb0
diff --git a/mall/.git_disabled/objects/80/fa6aa344d13a67bbb82715bf6ca5f861862318 b/.git_disabled/objects/80/fa6aa344d13a67bbb82715bf6ca5f861862318
similarity index 100%
rename from mall/.git_disabled/objects/80/fa6aa344d13a67bbb82715bf6ca5f861862318
rename to .git_disabled/objects/80/fa6aa344d13a67bbb82715bf6ca5f861862318
diff --git a/mall/.git_disabled/objects/81/3e91fe96e20f837dc93a05b72ef831d0d62893 b/.git_disabled/objects/81/3e91fe96e20f837dc93a05b72ef831d0d62893
similarity index 100%
rename from mall/.git_disabled/objects/81/3e91fe96e20f837dc93a05b72ef831d0d62893
rename to .git_disabled/objects/81/3e91fe96e20f837dc93a05b72ef831d0d62893
diff --git a/mall/.git_disabled/objects/81/6d6901a8d814d1437112a0063792b350b4f1e4 b/.git_disabled/objects/81/6d6901a8d814d1437112a0063792b350b4f1e4
similarity index 100%
rename from mall/.git_disabled/objects/81/6d6901a8d814d1437112a0063792b350b4f1e4
rename to .git_disabled/objects/81/6d6901a8d814d1437112a0063792b350b4f1e4
diff --git a/mall/.git_disabled/objects/81/9cf5486f5dfd9ebfe852accdf6e53493b209f5 b/.git_disabled/objects/81/9cf5486f5dfd9ebfe852accdf6e53493b209f5
similarity index 100%
rename from mall/.git_disabled/objects/81/9cf5486f5dfd9ebfe852accdf6e53493b209f5
rename to .git_disabled/objects/81/9cf5486f5dfd9ebfe852accdf6e53493b209f5
diff --git a/mall/.git_disabled/objects/82/00c3a94049d5c4c6b005c133af9e43ff3e8442 b/.git_disabled/objects/82/00c3a94049d5c4c6b005c133af9e43ff3e8442
similarity index 100%
rename from mall/.git_disabled/objects/82/00c3a94049d5c4c6b005c133af9e43ff3e8442
rename to .git_disabled/objects/82/00c3a94049d5c4c6b005c133af9e43ff3e8442
diff --git a/mall/.git_disabled/objects/82/a6e32242823de823426642cfc525308c0e4872 b/.git_disabled/objects/82/a6e32242823de823426642cfc525308c0e4872
similarity index 100%
rename from mall/.git_disabled/objects/82/a6e32242823de823426642cfc525308c0e4872
rename to .git_disabled/objects/82/a6e32242823de823426642cfc525308c0e4872
diff --git a/mall/.git_disabled/objects/82/d46a6bc8796fc88122351de921293b6cf86b90 b/.git_disabled/objects/82/d46a6bc8796fc88122351de921293b6cf86b90
similarity index 100%
rename from mall/.git_disabled/objects/82/d46a6bc8796fc88122351de921293b6cf86b90
rename to .git_disabled/objects/82/d46a6bc8796fc88122351de921293b6cf86b90
diff --git a/mall/.git_disabled/objects/83/10e3df76db1eb1b240255d9b5043138fbbf844 b/.git_disabled/objects/83/10e3df76db1eb1b240255d9b5043138fbbf844
similarity index 100%
rename from mall/.git_disabled/objects/83/10e3df76db1eb1b240255d9b5043138fbbf844
rename to .git_disabled/objects/83/10e3df76db1eb1b240255d9b5043138fbbf844
diff --git a/mall/.git_disabled/objects/83/113b958b5748559e401af5eb07df301b51cb4d b/.git_disabled/objects/83/113b958b5748559e401af5eb07df301b51cb4d
similarity index 100%
rename from mall/.git_disabled/objects/83/113b958b5748559e401af5eb07df301b51cb4d
rename to .git_disabled/objects/83/113b958b5748559e401af5eb07df301b51cb4d
diff --git a/mall/.git_disabled/objects/83/dcc87376c48bec61c8fbe330abd64fffec0c02 b/.git_disabled/objects/83/dcc87376c48bec61c8fbe330abd64fffec0c02
similarity index 100%
rename from mall/.git_disabled/objects/83/dcc87376c48bec61c8fbe330abd64fffec0c02
rename to .git_disabled/objects/83/dcc87376c48bec61c8fbe330abd64fffec0c02
diff --git a/mall/.git_disabled/objects/84/0e6fcc853120745657e8f3823196136ea58a77 b/.git_disabled/objects/84/0e6fcc853120745657e8f3823196136ea58a77
similarity index 100%
rename from mall/.git_disabled/objects/84/0e6fcc853120745657e8f3823196136ea58a77
rename to .git_disabled/objects/84/0e6fcc853120745657e8f3823196136ea58a77
diff --git a/mall/.git_disabled/objects/84/18059a1748fd51b8764119bffd0bd22b437b86 b/.git_disabled/objects/84/18059a1748fd51b8764119bffd0bd22b437b86
similarity index 100%
rename from mall/.git_disabled/objects/84/18059a1748fd51b8764119bffd0bd22b437b86
rename to .git_disabled/objects/84/18059a1748fd51b8764119bffd0bd22b437b86
diff --git a/mall/.git_disabled/objects/84/4563ad0bfecae89ee1857a77c28b2f31cb2466 b/.git_disabled/objects/84/4563ad0bfecae89ee1857a77c28b2f31cb2466
similarity index 100%
rename from mall/.git_disabled/objects/84/4563ad0bfecae89ee1857a77c28b2f31cb2466
rename to .git_disabled/objects/84/4563ad0bfecae89ee1857a77c28b2f31cb2466
diff --git a/mall/.git_disabled/objects/85/45a3148bac1e161d5fa5825a012effe6924619 b/.git_disabled/objects/85/45a3148bac1e161d5fa5825a012effe6924619
similarity index 100%
rename from mall/.git_disabled/objects/85/45a3148bac1e161d5fa5825a012effe6924619
rename to .git_disabled/objects/85/45a3148bac1e161d5fa5825a012effe6924619
diff --git a/mall/.git_disabled/objects/85/4af7d045127c7dd3669b78a38d6bab18a284e8 b/.git_disabled/objects/85/4af7d045127c7dd3669b78a38d6bab18a284e8
similarity index 100%
rename from mall/.git_disabled/objects/85/4af7d045127c7dd3669b78a38d6bab18a284e8
rename to .git_disabled/objects/85/4af7d045127c7dd3669b78a38d6bab18a284e8
diff --git a/mall/.git_disabled/objects/87/9ad4d767356dd6fa26d3e0bd0c1032f4473d73 b/.git_disabled/objects/87/9ad4d767356dd6fa26d3e0bd0c1032f4473d73
similarity index 100%
rename from mall/.git_disabled/objects/87/9ad4d767356dd6fa26d3e0bd0c1032f4473d73
rename to .git_disabled/objects/87/9ad4d767356dd6fa26d3e0bd0c1032f4473d73
diff --git a/mall/.git_disabled/objects/88/e1e655d3e88558e24e96647a4ea96fb2b307af b/.git_disabled/objects/88/e1e655d3e88558e24e96647a4ea96fb2b307af
similarity index 100%
rename from mall/.git_disabled/objects/88/e1e655d3e88558e24e96647a4ea96fb2b307af
rename to .git_disabled/objects/88/e1e655d3e88558e24e96647a4ea96fb2b307af
diff --git a/mall/.git_disabled/objects/89/6f669a2d75c55697c17927495d370b15253727 b/.git_disabled/objects/89/6f669a2d75c55697c17927495d370b15253727
similarity index 100%
rename from mall/.git_disabled/objects/89/6f669a2d75c55697c17927495d370b15253727
rename to .git_disabled/objects/89/6f669a2d75c55697c17927495d370b15253727
diff --git a/mall/.git_disabled/objects/89/7375f218341523c676e20119170c70449efe1b b/.git_disabled/objects/89/7375f218341523c676e20119170c70449efe1b
similarity index 100%
rename from mall/.git_disabled/objects/89/7375f218341523c676e20119170c70449efe1b
rename to .git_disabled/objects/89/7375f218341523c676e20119170c70449efe1b
diff --git a/mall/.git_disabled/objects/89/80aaba9e038dbfc4d94e26dcda0b926774a0c1 b/.git_disabled/objects/89/80aaba9e038dbfc4d94e26dcda0b926774a0c1
similarity index 100%
rename from mall/.git_disabled/objects/89/80aaba9e038dbfc4d94e26dcda0b926774a0c1
rename to .git_disabled/objects/89/80aaba9e038dbfc4d94e26dcda0b926774a0c1
diff --git a/mall/.git_disabled/objects/89/bea656620e9505b520142312cb7faf366feaff b/.git_disabled/objects/89/bea656620e9505b520142312cb7faf366feaff
similarity index 100%
rename from mall/.git_disabled/objects/89/bea656620e9505b520142312cb7faf366feaff
rename to .git_disabled/objects/89/bea656620e9505b520142312cb7faf366feaff
diff --git a/mall/.git_disabled/objects/89/e45115cec0917297a59f1f3543a075272b51fd b/.git_disabled/objects/89/e45115cec0917297a59f1f3543a075272b51fd
similarity index 100%
rename from mall/.git_disabled/objects/89/e45115cec0917297a59f1f3543a075272b51fd
rename to .git_disabled/objects/89/e45115cec0917297a59f1f3543a075272b51fd
diff --git a/mall/.git_disabled/objects/8a/535e3f387f58d736ca44a544e45ac1fe784cc8 b/.git_disabled/objects/8a/535e3f387f58d736ca44a544e45ac1fe784cc8
similarity index 100%
rename from mall/.git_disabled/objects/8a/535e3f387f58d736ca44a544e45ac1fe784cc8
rename to .git_disabled/objects/8a/535e3f387f58d736ca44a544e45ac1fe784cc8
diff --git a/mall/.git_disabled/objects/8a/cf24d88d47214bada9f81bb80e26f203e95f55 b/.git_disabled/objects/8a/cf24d88d47214bada9f81bb80e26f203e95f55
similarity index 100%
rename from mall/.git_disabled/objects/8a/cf24d88d47214bada9f81bb80e26f203e95f55
rename to .git_disabled/objects/8a/cf24d88d47214bada9f81bb80e26f203e95f55
diff --git a/mall/.git_disabled/objects/8a/e452a8a8350fcbfc5a09d44b392b1054338d41 b/.git_disabled/objects/8a/e452a8a8350fcbfc5a09d44b392b1054338d41
similarity index 100%
rename from mall/.git_disabled/objects/8a/e452a8a8350fcbfc5a09d44b392b1054338d41
rename to .git_disabled/objects/8a/e452a8a8350fcbfc5a09d44b392b1054338d41
diff --git a/mall/.git_disabled/objects/8b/62d14585e7fc204db28ed36b5c1ae9570672cd b/.git_disabled/objects/8b/62d14585e7fc204db28ed36b5c1ae9570672cd
similarity index 100%
rename from mall/.git_disabled/objects/8b/62d14585e7fc204db28ed36b5c1ae9570672cd
rename to .git_disabled/objects/8b/62d14585e7fc204db28ed36b5c1ae9570672cd
diff --git a/mall/.git_disabled/objects/8b/638472b45dac3a965ed44f4160a4710e3d7624 b/.git_disabled/objects/8b/638472b45dac3a965ed44f4160a4710e3d7624
similarity index 100%
rename from mall/.git_disabled/objects/8b/638472b45dac3a965ed44f4160a4710e3d7624
rename to .git_disabled/objects/8b/638472b45dac3a965ed44f4160a4710e3d7624
diff --git a/mall/.git_disabled/objects/8b/b3efd50c4554b9aedb990f0cc2f58904ce25f9 b/.git_disabled/objects/8b/b3efd50c4554b9aedb990f0cc2f58904ce25f9
similarity index 100%
rename from mall/.git_disabled/objects/8b/b3efd50c4554b9aedb990f0cc2f58904ce25f9
rename to .git_disabled/objects/8b/b3efd50c4554b9aedb990f0cc2f58904ce25f9
diff --git a/mall/.git_disabled/objects/8c/5024a943b9999336ac3b491b5384c43bb54d30 b/.git_disabled/objects/8c/5024a943b9999336ac3b491b5384c43bb54d30
similarity index 100%
rename from mall/.git_disabled/objects/8c/5024a943b9999336ac3b491b5384c43bb54d30
rename to .git_disabled/objects/8c/5024a943b9999336ac3b491b5384c43bb54d30
diff --git a/mall/.git_disabled/objects/8c/6c10a63e8d3b48f86288f982ab9d72c237e7f9 b/.git_disabled/objects/8c/6c10a63e8d3b48f86288f982ab9d72c237e7f9
similarity index 100%
rename from mall/.git_disabled/objects/8c/6c10a63e8d3b48f86288f982ab9d72c237e7f9
rename to .git_disabled/objects/8c/6c10a63e8d3b48f86288f982ab9d72c237e7f9
diff --git a/mall/.git_disabled/objects/8c/e98ec397fe0946a262e7003a5a9535b281ffbe b/.git_disabled/objects/8c/e98ec397fe0946a262e7003a5a9535b281ffbe
similarity index 100%
rename from mall/.git_disabled/objects/8c/e98ec397fe0946a262e7003a5a9535b281ffbe
rename to .git_disabled/objects/8c/e98ec397fe0946a262e7003a5a9535b281ffbe
diff --git a/mall/.git_disabled/objects/8c/f90f4c7db8042f785d751a787de126cae30c2e b/.git_disabled/objects/8c/f90f4c7db8042f785d751a787de126cae30c2e
similarity index 100%
rename from mall/.git_disabled/objects/8c/f90f4c7db8042f785d751a787de126cae30c2e
rename to .git_disabled/objects/8c/f90f4c7db8042f785d751a787de126cae30c2e
diff --git a/mall/.git_disabled/objects/8d/9528886773548cfd4b3562da3e7ee7f85aaca2 b/.git_disabled/objects/8d/9528886773548cfd4b3562da3e7ee7f85aaca2
similarity index 100%
rename from mall/.git_disabled/objects/8d/9528886773548cfd4b3562da3e7ee7f85aaca2
rename to .git_disabled/objects/8d/9528886773548cfd4b3562da3e7ee7f85aaca2
diff --git a/mall/.git_disabled/objects/8d/970c70a191cfa8ef6ac8051d238b2142c47286 b/.git_disabled/objects/8d/970c70a191cfa8ef6ac8051d238b2142c47286
similarity index 100%
rename from mall/.git_disabled/objects/8d/970c70a191cfa8ef6ac8051d238b2142c47286
rename to .git_disabled/objects/8d/970c70a191cfa8ef6ac8051d238b2142c47286
diff --git a/mall/.git_disabled/objects/8e/8d13b40dcdd5a3c430dd44ea524d7881e35eae b/.git_disabled/objects/8e/8d13b40dcdd5a3c430dd44ea524d7881e35eae
similarity index 100%
rename from mall/.git_disabled/objects/8e/8d13b40dcdd5a3c430dd44ea524d7881e35eae
rename to .git_disabled/objects/8e/8d13b40dcdd5a3c430dd44ea524d7881e35eae
diff --git a/mall/.git_disabled/objects/8e/9f3e3388fc1188f4478c64da2383c7d4c1b570 b/.git_disabled/objects/8e/9f3e3388fc1188f4478c64da2383c7d4c1b570
similarity index 100%
rename from mall/.git_disabled/objects/8e/9f3e3388fc1188f4478c64da2383c7d4c1b570
rename to .git_disabled/objects/8e/9f3e3388fc1188f4478c64da2383c7d4c1b570
diff --git a/mall/.git_disabled/objects/8e/da932bc1c86026a3f7957103a4e1b337e83a48 b/.git_disabled/objects/8e/da932bc1c86026a3f7957103a4e1b337e83a48
similarity index 100%
rename from mall/.git_disabled/objects/8e/da932bc1c86026a3f7957103a4e1b337e83a48
rename to .git_disabled/objects/8e/da932bc1c86026a3f7957103a4e1b337e83a48
diff --git a/mall/.git_disabled/objects/90/1570cf62268d5c3b327380dc171482a76b72de b/.git_disabled/objects/90/1570cf62268d5c3b327380dc171482a76b72de
similarity index 100%
rename from mall/.git_disabled/objects/90/1570cf62268d5c3b327380dc171482a76b72de
rename to .git_disabled/objects/90/1570cf62268d5c3b327380dc171482a76b72de
diff --git a/mall/.git_disabled/objects/90/95fd79417185ba3d532c3f11c40b58bc068f39 b/.git_disabled/objects/90/95fd79417185ba3d532c3f11c40b58bc068f39
similarity index 100%
rename from mall/.git_disabled/objects/90/95fd79417185ba3d532c3f11c40b58bc068f39
rename to .git_disabled/objects/90/95fd79417185ba3d532c3f11c40b58bc068f39
diff --git a/mall/.git_disabled/objects/91/80a3f5c1dcaf2c9f07b6feb729ceb33e84864f b/.git_disabled/objects/91/80a3f5c1dcaf2c9f07b6feb729ceb33e84864f
similarity index 100%
rename from mall/.git_disabled/objects/91/80a3f5c1dcaf2c9f07b6feb729ceb33e84864f
rename to .git_disabled/objects/91/80a3f5c1dcaf2c9f07b6feb729ceb33e84864f
diff --git a/mall/.git_disabled/objects/91/9295f3c54c97388f86a3308ccf49b33e1664d4 b/.git_disabled/objects/91/9295f3c54c97388f86a3308ccf49b33e1664d4
similarity index 100%
rename from mall/.git_disabled/objects/91/9295f3c54c97388f86a3308ccf49b33e1664d4
rename to .git_disabled/objects/91/9295f3c54c97388f86a3308ccf49b33e1664d4
diff --git a/mall/.git_disabled/objects/92/8fe8293b72186b7e316ffbcc770464dc9d96cb b/.git_disabled/objects/92/8fe8293b72186b7e316ffbcc770464dc9d96cb
similarity index 100%
rename from mall/.git_disabled/objects/92/8fe8293b72186b7e316ffbcc770464dc9d96cb
rename to .git_disabled/objects/92/8fe8293b72186b7e316ffbcc770464dc9d96cb
diff --git a/mall/.git_disabled/objects/93/18327cc988ebe1c8c229f02675c8ef39305c74 b/.git_disabled/objects/93/18327cc988ebe1c8c229f02675c8ef39305c74
similarity index 100%
rename from mall/.git_disabled/objects/93/18327cc988ebe1c8c229f02675c8ef39305c74
rename to .git_disabled/objects/93/18327cc988ebe1c8c229f02675c8ef39305c74
diff --git a/mall/.git_disabled/objects/93/d69e90ad02df30eaaca6f05777a021ebb74a18 b/.git_disabled/objects/93/d69e90ad02df30eaaca6f05777a021ebb74a18
similarity index 100%
rename from mall/.git_disabled/objects/93/d69e90ad02df30eaaca6f05777a021ebb74a18
rename to .git_disabled/objects/93/d69e90ad02df30eaaca6f05777a021ebb74a18
diff --git a/mall/.git_disabled/objects/93/ff692b9c7663db897c36e3a70265e299f46b65 b/.git_disabled/objects/93/ff692b9c7663db897c36e3a70265e299f46b65
similarity index 100%
rename from mall/.git_disabled/objects/93/ff692b9c7663db897c36e3a70265e299f46b65
rename to .git_disabled/objects/93/ff692b9c7663db897c36e3a70265e299f46b65
diff --git a/mall/.git_disabled/objects/94/1b343274f69f9328b2f781554fe560fdaab343 b/.git_disabled/objects/94/1b343274f69f9328b2f781554fe560fdaab343
similarity index 100%
rename from mall/.git_disabled/objects/94/1b343274f69f9328b2f781554fe560fdaab343
rename to .git_disabled/objects/94/1b343274f69f9328b2f781554fe560fdaab343
diff --git a/mall/.git_disabled/objects/94/5c717a8610d2c55eb8bca924292964faa400a9 b/.git_disabled/objects/94/5c717a8610d2c55eb8bca924292964faa400a9
similarity index 100%
rename from mall/.git_disabled/objects/94/5c717a8610d2c55eb8bca924292964faa400a9
rename to .git_disabled/objects/94/5c717a8610d2c55eb8bca924292964faa400a9
diff --git a/mall/.git_disabled/objects/95/8e7acc6373106b175dba4df7a51bcff3654489 b/.git_disabled/objects/95/8e7acc6373106b175dba4df7a51bcff3654489
similarity index 100%
rename from mall/.git_disabled/objects/95/8e7acc6373106b175dba4df7a51bcff3654489
rename to .git_disabled/objects/95/8e7acc6373106b175dba4df7a51bcff3654489
diff --git a/mall/.git_disabled/objects/95/b35338e0993e26c30dc2c9d25c74e93f6b3bb7 b/.git_disabled/objects/95/b35338e0993e26c30dc2c9d25c74e93f6b3bb7
similarity index 100%
rename from mall/.git_disabled/objects/95/b35338e0993e26c30dc2c9d25c74e93f6b3bb7
rename to .git_disabled/objects/95/b35338e0993e26c30dc2c9d25c74e93f6b3bb7
diff --git a/mall/.git_disabled/objects/97/63fe0021dbf4921c086ad9b3e4e8947e60d372 b/.git_disabled/objects/97/63fe0021dbf4921c086ad9b3e4e8947e60d372
similarity index 100%
rename from mall/.git_disabled/objects/97/63fe0021dbf4921c086ad9b3e4e8947e60d372
rename to .git_disabled/objects/97/63fe0021dbf4921c086ad9b3e4e8947e60d372
diff --git a/mall/.git_disabled/objects/98/b477474df113ab2d7cabc09f07767dc0252939 b/.git_disabled/objects/98/b477474df113ab2d7cabc09f07767dc0252939
similarity index 100%
rename from mall/.git_disabled/objects/98/b477474df113ab2d7cabc09f07767dc0252939
rename to .git_disabled/objects/98/b477474df113ab2d7cabc09f07767dc0252939
diff --git a/mall/.git_disabled/objects/99/38dd2ac6e871cbc4fdc629b20acf1c940fc8cc b/.git_disabled/objects/99/38dd2ac6e871cbc4fdc629b20acf1c940fc8cc
similarity index 100%
rename from mall/.git_disabled/objects/99/38dd2ac6e871cbc4fdc629b20acf1c940fc8cc
rename to .git_disabled/objects/99/38dd2ac6e871cbc4fdc629b20acf1c940fc8cc
diff --git a/mall/.git_disabled/objects/99/9dcb1d569c071fe6c14c2eaa13cd4da155d285 b/.git_disabled/objects/99/9dcb1d569c071fe6c14c2eaa13cd4da155d285
similarity index 100%
rename from mall/.git_disabled/objects/99/9dcb1d569c071fe6c14c2eaa13cd4da155d285
rename to .git_disabled/objects/99/9dcb1d569c071fe6c14c2eaa13cd4da155d285
diff --git a/mall/.git_disabled/objects/99/cf725fca7900c87ded6d8bb0e9056efa4d217d b/.git_disabled/objects/99/cf725fca7900c87ded6d8bb0e9056efa4d217d
similarity index 100%
rename from mall/.git_disabled/objects/99/cf725fca7900c87ded6d8bb0e9056efa4d217d
rename to .git_disabled/objects/99/cf725fca7900c87ded6d8bb0e9056efa4d217d
diff --git a/mall/.git_disabled/objects/9a/7a140d49ad83d9a42f4d1522efea893fcce83a b/.git_disabled/objects/9a/7a140d49ad83d9a42f4d1522efea893fcce83a
similarity index 100%
rename from mall/.git_disabled/objects/9a/7a140d49ad83d9a42f4d1522efea893fcce83a
rename to .git_disabled/objects/9a/7a140d49ad83d9a42f4d1522efea893fcce83a
diff --git a/mall/.git_disabled/objects/9a/cd5a6b2be3b43cf61b8d7fdfe012c1bb603bd7 b/.git_disabled/objects/9a/cd5a6b2be3b43cf61b8d7fdfe012c1bb603bd7
similarity index 100%
rename from mall/.git_disabled/objects/9a/cd5a6b2be3b43cf61b8d7fdfe012c1bb603bd7
rename to .git_disabled/objects/9a/cd5a6b2be3b43cf61b8d7fdfe012c1bb603bd7
diff --git a/mall/.git_disabled/objects/9b/6b4af19bacc8557da22fdd44bcee809c055353 b/.git_disabled/objects/9b/6b4af19bacc8557da22fdd44bcee809c055353
similarity index 100%
rename from mall/.git_disabled/objects/9b/6b4af19bacc8557da22fdd44bcee809c055353
rename to .git_disabled/objects/9b/6b4af19bacc8557da22fdd44bcee809c055353
diff --git a/mall/.git_disabled/objects/9b/83bec86f41e9ecf811c17915f2ab69172cd716 b/.git_disabled/objects/9b/83bec86f41e9ecf811c17915f2ab69172cd716
similarity index 100%
rename from mall/.git_disabled/objects/9b/83bec86f41e9ecf811c17915f2ab69172cd716
rename to .git_disabled/objects/9b/83bec86f41e9ecf811c17915f2ab69172cd716
diff --git a/mall/.git_disabled/objects/9b/f2a0ee0a8cc06f8eb81e6905482da1feea58b8 b/.git_disabled/objects/9b/f2a0ee0a8cc06f8eb81e6905482da1feea58b8
similarity index 100%
rename from mall/.git_disabled/objects/9b/f2a0ee0a8cc06f8eb81e6905482da1feea58b8
rename to .git_disabled/objects/9b/f2a0ee0a8cc06f8eb81e6905482da1feea58b8
diff --git a/mall/.git_disabled/objects/9b/fe13984245bb959c91a49088fe0cacabda88ef b/.git_disabled/objects/9b/fe13984245bb959c91a49088fe0cacabda88ef
similarity index 100%
rename from mall/.git_disabled/objects/9b/fe13984245bb959c91a49088fe0cacabda88ef
rename to .git_disabled/objects/9b/fe13984245bb959c91a49088fe0cacabda88ef
diff --git a/mall/.git_disabled/objects/9c/c7db878956479fc36be8ea8066f8bffff1ff1e b/.git_disabled/objects/9c/c7db878956479fc36be8ea8066f8bffff1ff1e
similarity index 100%
rename from mall/.git_disabled/objects/9c/c7db878956479fc36be8ea8066f8bffff1ff1e
rename to .git_disabled/objects/9c/c7db878956479fc36be8ea8066f8bffff1ff1e
diff --git a/mall/.git_disabled/objects/9d/44c43e4bf22c551b5f7f7560a96a48233b8449 b/.git_disabled/objects/9d/44c43e4bf22c551b5f7f7560a96a48233b8449
similarity index 100%
rename from mall/.git_disabled/objects/9d/44c43e4bf22c551b5f7f7560a96a48233b8449
rename to .git_disabled/objects/9d/44c43e4bf22c551b5f7f7560a96a48233b8449
diff --git a/mall/.git_disabled/objects/9d/d7d4b7eeeec554dce372f34574269d0d696e13 b/.git_disabled/objects/9d/d7d4b7eeeec554dce372f34574269d0d696e13
similarity index 100%
rename from mall/.git_disabled/objects/9d/d7d4b7eeeec554dce372f34574269d0d696e13
rename to .git_disabled/objects/9d/d7d4b7eeeec554dce372f34574269d0d696e13
diff --git a/mall/.git_disabled/objects/9e/240061834277dddc0e83095c55d7ff40a4297b b/.git_disabled/objects/9e/240061834277dddc0e83095c55d7ff40a4297b
similarity index 100%
rename from mall/.git_disabled/objects/9e/240061834277dddc0e83095c55d7ff40a4297b
rename to .git_disabled/objects/9e/240061834277dddc0e83095c55d7ff40a4297b
diff --git a/mall/.git_disabled/objects/9e/b05253d331a2ee3b24982553c5264cc7f35f41 b/.git_disabled/objects/9e/b05253d331a2ee3b24982553c5264cc7f35f41
similarity index 100%
rename from mall/.git_disabled/objects/9e/b05253d331a2ee3b24982553c5264cc7f35f41
rename to .git_disabled/objects/9e/b05253d331a2ee3b24982553c5264cc7f35f41
diff --git a/mall/.git_disabled/objects/9f/3c2803e3ae211b0917f347d6f316ea08f3eea8 b/.git_disabled/objects/9f/3c2803e3ae211b0917f347d6f316ea08f3eea8
similarity index 100%
rename from mall/.git_disabled/objects/9f/3c2803e3ae211b0917f347d6f316ea08f3eea8
rename to .git_disabled/objects/9f/3c2803e3ae211b0917f347d6f316ea08f3eea8
diff --git a/mall/.git_disabled/objects/a0/2fabc6e9caec1d9377fe770b8dfddd64548dad b/.git_disabled/objects/a0/2fabc6e9caec1d9377fe770b8dfddd64548dad
similarity index 100%
rename from mall/.git_disabled/objects/a0/2fabc6e9caec1d9377fe770b8dfddd64548dad
rename to .git_disabled/objects/a0/2fabc6e9caec1d9377fe770b8dfddd64548dad
diff --git a/mall/.git_disabled/objects/a1/3a15bef1f0681a37746c13811fe2e858c0e4c7 b/.git_disabled/objects/a1/3a15bef1f0681a37746c13811fe2e858c0e4c7
similarity index 100%
rename from mall/.git_disabled/objects/a1/3a15bef1f0681a37746c13811fe2e858c0e4c7
rename to .git_disabled/objects/a1/3a15bef1f0681a37746c13811fe2e858c0e4c7
diff --git a/mall/.git_disabled/objects/a1/4235e2c2b220bf056dd52ca9cba123c85105ee b/.git_disabled/objects/a1/4235e2c2b220bf056dd52ca9cba123c85105ee
similarity index 100%
rename from mall/.git_disabled/objects/a1/4235e2c2b220bf056dd52ca9cba123c85105ee
rename to .git_disabled/objects/a1/4235e2c2b220bf056dd52ca9cba123c85105ee
diff --git a/mall/.git_disabled/objects/a1/da08fa22649d9d2a2887200b7765060b74c41d b/.git_disabled/objects/a1/da08fa22649d9d2a2887200b7765060b74c41d
similarity index 100%
rename from mall/.git_disabled/objects/a1/da08fa22649d9d2a2887200b7765060b74c41d
rename to .git_disabled/objects/a1/da08fa22649d9d2a2887200b7765060b74c41d
diff --git a/mall/.git_disabled/objects/a2/4c488a88bc281c74a5b1b646050ad94f7a2839 b/.git_disabled/objects/a2/4c488a88bc281c74a5b1b646050ad94f7a2839
similarity index 100%
rename from mall/.git_disabled/objects/a2/4c488a88bc281c74a5b1b646050ad94f7a2839
rename to .git_disabled/objects/a2/4c488a88bc281c74a5b1b646050ad94f7a2839
diff --git a/mall/.git_disabled/objects/a2/6780fb0f603d233f172e4788271ca7b7849e04 b/.git_disabled/objects/a2/6780fb0f603d233f172e4788271ca7b7849e04
similarity index 100%
rename from mall/.git_disabled/objects/a2/6780fb0f603d233f172e4788271ca7b7849e04
rename to .git_disabled/objects/a2/6780fb0f603d233f172e4788271ca7b7849e04
diff --git a/mall/.git_disabled/objects/a2/f3c8a5168b0b5e7fd683a55552283adeb47075 b/.git_disabled/objects/a2/f3c8a5168b0b5e7fd683a55552283adeb47075
similarity index 100%
rename from mall/.git_disabled/objects/a2/f3c8a5168b0b5e7fd683a55552283adeb47075
rename to .git_disabled/objects/a2/f3c8a5168b0b5e7fd683a55552283adeb47075
diff --git a/mall/.git_disabled/objects/a2/fce1be5a963364ad9059cc08e6558253065eee b/.git_disabled/objects/a2/fce1be5a963364ad9059cc08e6558253065eee
similarity index 100%
rename from mall/.git_disabled/objects/a2/fce1be5a963364ad9059cc08e6558253065eee
rename to .git_disabled/objects/a2/fce1be5a963364ad9059cc08e6558253065eee
diff --git a/mall/.git_disabled/objects/a3/3c28cb7c9ab96b513a0bafd3aa79cb0063289d b/.git_disabled/objects/a3/3c28cb7c9ab96b513a0bafd3aa79cb0063289d
similarity index 100%
rename from mall/.git_disabled/objects/a3/3c28cb7c9ab96b513a0bafd3aa79cb0063289d
rename to .git_disabled/objects/a3/3c28cb7c9ab96b513a0bafd3aa79cb0063289d
diff --git a/mall/.git_disabled/objects/a3/56592b8dc6c0f09705d8ca4c734ec42869a4e0 b/.git_disabled/objects/a3/56592b8dc6c0f09705d8ca4c734ec42869a4e0
similarity index 100%
rename from mall/.git_disabled/objects/a3/56592b8dc6c0f09705d8ca4c734ec42869a4e0
rename to .git_disabled/objects/a3/56592b8dc6c0f09705d8ca4c734ec42869a4e0
diff --git a/mall/.git_disabled/objects/a3/f194011eedefee35d0305349c20bd856ea3a96 b/.git_disabled/objects/a3/f194011eedefee35d0305349c20bd856ea3a96
similarity index 100%
rename from mall/.git_disabled/objects/a3/f194011eedefee35d0305349c20bd856ea3a96
rename to .git_disabled/objects/a3/f194011eedefee35d0305349c20bd856ea3a96
diff --git a/mall/.git_disabled/objects/a4/4bc0a5160b82e4a9fd18950a83d63d862c9767 b/.git_disabled/objects/a4/4bc0a5160b82e4a9fd18950a83d63d862c9767
similarity index 100%
rename from mall/.git_disabled/objects/a4/4bc0a5160b82e4a9fd18950a83d63d862c9767
rename to .git_disabled/objects/a4/4bc0a5160b82e4a9fd18950a83d63d862c9767
diff --git a/mall/.git_disabled/objects/a4/7b3f3e45d4d5f9110389a6622bc5c52509baa7 b/.git_disabled/objects/a4/7b3f3e45d4d5f9110389a6622bc5c52509baa7
similarity index 100%
rename from mall/.git_disabled/objects/a4/7b3f3e45d4d5f9110389a6622bc5c52509baa7
rename to .git_disabled/objects/a4/7b3f3e45d4d5f9110389a6622bc5c52509baa7
diff --git a/mall/.git_disabled/objects/a4/dd6da00e3277b6055aaae86dfe5764112f6fee b/.git_disabled/objects/a4/dd6da00e3277b6055aaae86dfe5764112f6fee
similarity index 100%
rename from mall/.git_disabled/objects/a4/dd6da00e3277b6055aaae86dfe5764112f6fee
rename to .git_disabled/objects/a4/dd6da00e3277b6055aaae86dfe5764112f6fee
diff --git a/mall/.git_disabled/objects/a4/fa00c93501c27c16b745b7d262d0bd5a838dcd b/.git_disabled/objects/a4/fa00c93501c27c16b745b7d262d0bd5a838dcd
similarity index 100%
rename from mall/.git_disabled/objects/a4/fa00c93501c27c16b745b7d262d0bd5a838dcd
rename to .git_disabled/objects/a4/fa00c93501c27c16b745b7d262d0bd5a838dcd
diff --git a/mall/.git_disabled/objects/a5/137cbd6ca212614699c424aabe157c727956ce b/.git_disabled/objects/a5/137cbd6ca212614699c424aabe157c727956ce
similarity index 100%
rename from mall/.git_disabled/objects/a5/137cbd6ca212614699c424aabe157c727956ce
rename to .git_disabled/objects/a5/137cbd6ca212614699c424aabe157c727956ce
diff --git a/mall/.git_disabled/objects/a5/e69b8b10c987f75c8fe2d1e1d4e4dce13288ac b/.git_disabled/objects/a5/e69b8b10c987f75c8fe2d1e1d4e4dce13288ac
similarity index 100%
rename from mall/.git_disabled/objects/a5/e69b8b10c987f75c8fe2d1e1d4e4dce13288ac
rename to .git_disabled/objects/a5/e69b8b10c987f75c8fe2d1e1d4e4dce13288ac
diff --git a/mall/.git_disabled/objects/a6/781c370dde55c913852659f483086520082310 b/.git_disabled/objects/a6/781c370dde55c913852659f483086520082310
similarity index 100%
rename from mall/.git_disabled/objects/a6/781c370dde55c913852659f483086520082310
rename to .git_disabled/objects/a6/781c370dde55c913852659f483086520082310
diff --git a/mall/.git_disabled/objects/a6/b8041f751d564fba29e16794931b6a993fdf4a b/.git_disabled/objects/a6/b8041f751d564fba29e16794931b6a993fdf4a
similarity index 100%
rename from mall/.git_disabled/objects/a6/b8041f751d564fba29e16794931b6a993fdf4a
rename to .git_disabled/objects/a6/b8041f751d564fba29e16794931b6a993fdf4a
diff --git a/mall/.git_disabled/objects/a6/d2b56b759d589efcbeb81dc6593a7bc64cdab9 b/.git_disabled/objects/a6/d2b56b759d589efcbeb81dc6593a7bc64cdab9
similarity index 100%
rename from mall/.git_disabled/objects/a6/d2b56b759d589efcbeb81dc6593a7bc64cdab9
rename to .git_disabled/objects/a6/d2b56b759d589efcbeb81dc6593a7bc64cdab9
diff --git a/mall/.git_disabled/objects/a6/f3b3e43506926b3cd24f4ae40654fe407b16b4 b/.git_disabled/objects/a6/f3b3e43506926b3cd24f4ae40654fe407b16b4
similarity index 100%
rename from mall/.git_disabled/objects/a6/f3b3e43506926b3cd24f4ae40654fe407b16b4
rename to .git_disabled/objects/a6/f3b3e43506926b3cd24f4ae40654fe407b16b4
diff --git a/mall/.git_disabled/objects/a9/2848ae01f5bc2932f3bbc07978b05708c60e45 b/.git_disabled/objects/a9/2848ae01f5bc2932f3bbc07978b05708c60e45
similarity index 100%
rename from mall/.git_disabled/objects/a9/2848ae01f5bc2932f3bbc07978b05708c60e45
rename to .git_disabled/objects/a9/2848ae01f5bc2932f3bbc07978b05708c60e45
diff --git a/mall/.git_disabled/objects/aa/48a3be2d0b4d6d81c3d39409b3f547a77b1c17 b/.git_disabled/objects/aa/48a3be2d0b4d6d81c3d39409b3f547a77b1c17
similarity index 100%
rename from mall/.git_disabled/objects/aa/48a3be2d0b4d6d81c3d39409b3f547a77b1c17
rename to .git_disabled/objects/aa/48a3be2d0b4d6d81c3d39409b3f547a77b1c17
diff --git a/mall/.git_disabled/objects/aa/bad9385dbdd5aaae23fc0d6bbc3277e14c903a b/.git_disabled/objects/aa/bad9385dbdd5aaae23fc0d6bbc3277e14c903a
similarity index 100%
rename from mall/.git_disabled/objects/aa/bad9385dbdd5aaae23fc0d6bbc3277e14c903a
rename to .git_disabled/objects/aa/bad9385dbdd5aaae23fc0d6bbc3277e14c903a
diff --git a/mall/.git_disabled/objects/aa/f959c27e8dddb5ab1ced2e613cdfa7357da536 b/.git_disabled/objects/aa/f959c27e8dddb5ab1ced2e613cdfa7357da536
similarity index 100%
rename from mall/.git_disabled/objects/aa/f959c27e8dddb5ab1ced2e613cdfa7357da536
rename to .git_disabled/objects/aa/f959c27e8dddb5ab1ced2e613cdfa7357da536
diff --git a/mall/.git_disabled/objects/ab/038ec029662aaa9dcd7c624be85d5e35dc6e96 b/.git_disabled/objects/ab/038ec029662aaa9dcd7c624be85d5e35dc6e96
similarity index 100%
rename from mall/.git_disabled/objects/ab/038ec029662aaa9dcd7c624be85d5e35dc6e96
rename to .git_disabled/objects/ab/038ec029662aaa9dcd7c624be85d5e35dc6e96
diff --git a/mall/.git_disabled/objects/ab/06fab63ebd863dcc6d8cd4c56756ca45c10be1 b/.git_disabled/objects/ab/06fab63ebd863dcc6d8cd4c56756ca45c10be1
similarity index 100%
rename from mall/.git_disabled/objects/ab/06fab63ebd863dcc6d8cd4c56756ca45c10be1
rename to .git_disabled/objects/ab/06fab63ebd863dcc6d8cd4c56756ca45c10be1
diff --git a/mall/.git_disabled/objects/ab/0d75debc10f7380d048653e0c679890fb1613b b/.git_disabled/objects/ab/0d75debc10f7380d048653e0c679890fb1613b
similarity index 100%
rename from mall/.git_disabled/objects/ab/0d75debc10f7380d048653e0c679890fb1613b
rename to .git_disabled/objects/ab/0d75debc10f7380d048653e0c679890fb1613b
diff --git a/mall/.git_disabled/objects/ab/33eb5ba264ab9d3ec9ef01476a919d3d2e69f0 b/.git_disabled/objects/ab/33eb5ba264ab9d3ec9ef01476a919d3d2e69f0
similarity index 100%
rename from mall/.git_disabled/objects/ab/33eb5ba264ab9d3ec9ef01476a919d3d2e69f0
rename to .git_disabled/objects/ab/33eb5ba264ab9d3ec9ef01476a919d3d2e69f0
diff --git a/mall/.git_disabled/objects/ab/de6ca42f4c753feebc842e39ea2da263b180ce b/.git_disabled/objects/ab/de6ca42f4c753feebc842e39ea2da263b180ce
similarity index 100%
rename from mall/.git_disabled/objects/ab/de6ca42f4c753feebc842e39ea2da263b180ce
rename to .git_disabled/objects/ab/de6ca42f4c753feebc842e39ea2da263b180ce
diff --git a/mall/.git_disabled/objects/ac/527d5198323ad1185f9c9a4868f4a80a2ee328 b/.git_disabled/objects/ac/527d5198323ad1185f9c9a4868f4a80a2ee328
similarity index 100%
rename from mall/.git_disabled/objects/ac/527d5198323ad1185f9c9a4868f4a80a2ee328
rename to .git_disabled/objects/ac/527d5198323ad1185f9c9a4868f4a80a2ee328
diff --git a/mall/.git_disabled/objects/ac/9090a3544275881eed66d7f104073b21048687 b/.git_disabled/objects/ac/9090a3544275881eed66d7f104073b21048687
similarity index 100%
rename from mall/.git_disabled/objects/ac/9090a3544275881eed66d7f104073b21048687
rename to .git_disabled/objects/ac/9090a3544275881eed66d7f104073b21048687
diff --git a/mall/.git_disabled/objects/ad/0b567ee3ec142af8fbfab01197f3aa858f1e78 b/.git_disabled/objects/ad/0b567ee3ec142af8fbfab01197f3aa858f1e78
similarity index 100%
rename from mall/.git_disabled/objects/ad/0b567ee3ec142af8fbfab01197f3aa858f1e78
rename to .git_disabled/objects/ad/0b567ee3ec142af8fbfab01197f3aa858f1e78
diff --git a/mall/.git_disabled/objects/ad/1c8d8a5b69624952a8f65676b51ff1fae89022 b/.git_disabled/objects/ad/1c8d8a5b69624952a8f65676b51ff1fae89022
similarity index 100%
rename from mall/.git_disabled/objects/ad/1c8d8a5b69624952a8f65676b51ff1fae89022
rename to .git_disabled/objects/ad/1c8d8a5b69624952a8f65676b51ff1fae89022
diff --git a/mall/.git_disabled/objects/ad/787f6642b6e1c3b18a911a31f53c3a852d5f35 b/.git_disabled/objects/ad/787f6642b6e1c3b18a911a31f53c3a852d5f35
similarity index 100%
rename from mall/.git_disabled/objects/ad/787f6642b6e1c3b18a911a31f53c3a852d5f35
rename to .git_disabled/objects/ad/787f6642b6e1c3b18a911a31f53c3a852d5f35
diff --git a/mall/.git_disabled/objects/ad/a359c9b1bf3e213cfee20a3f20d7a3576ceaa0 b/.git_disabled/objects/ad/a359c9b1bf3e213cfee20a3f20d7a3576ceaa0
similarity index 100%
rename from mall/.git_disabled/objects/ad/a359c9b1bf3e213cfee20a3f20d7a3576ceaa0
rename to .git_disabled/objects/ad/a359c9b1bf3e213cfee20a3f20d7a3576ceaa0
diff --git a/mall/.git_disabled/objects/ae/69db8c27c1e1bf488e8af3be0a6f3cccc2e89a b/.git_disabled/objects/ae/69db8c27c1e1bf488e8af3be0a6f3cccc2e89a
similarity index 100%
rename from mall/.git_disabled/objects/ae/69db8c27c1e1bf488e8af3be0a6f3cccc2e89a
rename to .git_disabled/objects/ae/69db8c27c1e1bf488e8af3be0a6f3cccc2e89a
diff --git a/mall/.git_disabled/objects/af/13a2372f43dcd4439d86642e38e97aa10937b6 b/.git_disabled/objects/af/13a2372f43dcd4439d86642e38e97aa10937b6
similarity index 100%
rename from mall/.git_disabled/objects/af/13a2372f43dcd4439d86642e38e97aa10937b6
rename to .git_disabled/objects/af/13a2372f43dcd4439d86642e38e97aa10937b6
diff --git a/mall/.git_disabled/objects/af/316e6d94c477505554b040f022f3e40457146c b/.git_disabled/objects/af/316e6d94c477505554b040f022f3e40457146c
similarity index 100%
rename from mall/.git_disabled/objects/af/316e6d94c477505554b040f022f3e40457146c
rename to .git_disabled/objects/af/316e6d94c477505554b040f022f3e40457146c
diff --git a/mall/.git_disabled/objects/af/3c23069da84a0f938cacd83e8ad088f915c255 b/.git_disabled/objects/af/3c23069da84a0f938cacd83e8ad088f915c255
similarity index 100%
rename from mall/.git_disabled/objects/af/3c23069da84a0f938cacd83e8ad088f915c255
rename to .git_disabled/objects/af/3c23069da84a0f938cacd83e8ad088f915c255
diff --git a/mall/.git_disabled/objects/af/40ac727223a4b0cf244d2b0f4c56e4604d499e b/.git_disabled/objects/af/40ac727223a4b0cf244d2b0f4c56e4604d499e
similarity index 100%
rename from mall/.git_disabled/objects/af/40ac727223a4b0cf244d2b0f4c56e4604d499e
rename to .git_disabled/objects/af/40ac727223a4b0cf244d2b0f4c56e4604d499e
diff --git a/mall/.git_disabled/objects/af/5e8d686e666cdec25b853d039a7c040f093d95 b/.git_disabled/objects/af/5e8d686e666cdec25b853d039a7c040f093d95
similarity index 100%
rename from mall/.git_disabled/objects/af/5e8d686e666cdec25b853d039a7c040f093d95
rename to .git_disabled/objects/af/5e8d686e666cdec25b853d039a7c040f093d95
diff --git a/mall/.git_disabled/objects/b0/fa749e58910255a9551f524e7503d3b68917c9 b/.git_disabled/objects/b0/fa749e58910255a9551f524e7503d3b68917c9
similarity index 100%
rename from mall/.git_disabled/objects/b0/fa749e58910255a9551f524e7503d3b68917c9
rename to .git_disabled/objects/b0/fa749e58910255a9551f524e7503d3b68917c9
diff --git a/mall/.git_disabled/objects/b1/8482381fcb794d57ad3416ca690da405a0916d b/.git_disabled/objects/b1/8482381fcb794d57ad3416ca690da405a0916d
similarity index 100%
rename from mall/.git_disabled/objects/b1/8482381fcb794d57ad3416ca690da405a0916d
rename to .git_disabled/objects/b1/8482381fcb794d57ad3416ca690da405a0916d
diff --git a/mall/.git_disabled/objects/b1/99e3abb69766a966223660960f74c7dd8263a1 b/.git_disabled/objects/b1/99e3abb69766a966223660960f74c7dd8263a1
similarity index 100%
rename from mall/.git_disabled/objects/b1/99e3abb69766a966223660960f74c7dd8263a1
rename to .git_disabled/objects/b1/99e3abb69766a966223660960f74c7dd8263a1
diff --git a/mall/.git_disabled/objects/b1/b5c166730f47b07e5b49bbad32d6efab82a1e2 b/.git_disabled/objects/b1/b5c166730f47b07e5b49bbad32d6efab82a1e2
similarity index 100%
rename from mall/.git_disabled/objects/b1/b5c166730f47b07e5b49bbad32d6efab82a1e2
rename to .git_disabled/objects/b1/b5c166730f47b07e5b49bbad32d6efab82a1e2
diff --git a/mall/.git_disabled/objects/b1/ee362739ffa1548f13d8c2f504b232c913161a b/.git_disabled/objects/b1/ee362739ffa1548f13d8c2f504b232c913161a
similarity index 100%
rename from mall/.git_disabled/objects/b1/ee362739ffa1548f13d8c2f504b232c913161a
rename to .git_disabled/objects/b1/ee362739ffa1548f13d8c2f504b232c913161a
diff --git a/mall/.git_disabled/objects/b2/f9f6d7d97df4563a3bc2a50476968ad0c6db60 b/.git_disabled/objects/b2/f9f6d7d97df4563a3bc2a50476968ad0c6db60
similarity index 100%
rename from mall/.git_disabled/objects/b2/f9f6d7d97df4563a3bc2a50476968ad0c6db60
rename to .git_disabled/objects/b2/f9f6d7d97df4563a3bc2a50476968ad0c6db60
diff --git a/mall/.git_disabled/objects/b3/45947d6326e8214ac27f987bbc5e7c98ad5cfa b/.git_disabled/objects/b3/45947d6326e8214ac27f987bbc5e7c98ad5cfa
similarity index 100%
rename from mall/.git_disabled/objects/b3/45947d6326e8214ac27f987bbc5e7c98ad5cfa
rename to .git_disabled/objects/b3/45947d6326e8214ac27f987bbc5e7c98ad5cfa
diff --git a/mall/.git_disabled/objects/b3/ef5702b5b5e0faa5a1b5a7374356b4b5aeae2f b/.git_disabled/objects/b3/ef5702b5b5e0faa5a1b5a7374356b4b5aeae2f
similarity index 100%
rename from mall/.git_disabled/objects/b3/ef5702b5b5e0faa5a1b5a7374356b4b5aeae2f
rename to .git_disabled/objects/b3/ef5702b5b5e0faa5a1b5a7374356b4b5aeae2f
diff --git a/mall/.git_disabled/objects/b4/6448fc700a405206df90f42fb0db1deb64df9b b/.git_disabled/objects/b4/6448fc700a405206df90f42fb0db1deb64df9b
similarity index 100%
rename from mall/.git_disabled/objects/b4/6448fc700a405206df90f42fb0db1deb64df9b
rename to .git_disabled/objects/b4/6448fc700a405206df90f42fb0db1deb64df9b
diff --git a/mall/.git_disabled/objects/b4/9d17901ea775085d768aaf97e236004354d093 b/.git_disabled/objects/b4/9d17901ea775085d768aaf97e236004354d093
similarity index 100%
rename from mall/.git_disabled/objects/b4/9d17901ea775085d768aaf97e236004354d093
rename to .git_disabled/objects/b4/9d17901ea775085d768aaf97e236004354d093
diff --git a/mall/.git_disabled/objects/b5/5f2bcaff7b4711a4f44f9942f9df869538505d b/.git_disabled/objects/b5/5f2bcaff7b4711a4f44f9942f9df869538505d
similarity index 100%
rename from mall/.git_disabled/objects/b5/5f2bcaff7b4711a4f44f9942f9df869538505d
rename to .git_disabled/objects/b5/5f2bcaff7b4711a4f44f9942f9df869538505d
diff --git a/mall/.git_disabled/objects/b5/9d1ba1f7c34f80721ef74659796d3f2559fcb9 b/.git_disabled/objects/b5/9d1ba1f7c34f80721ef74659796d3f2559fcb9
similarity index 100%
rename from mall/.git_disabled/objects/b5/9d1ba1f7c34f80721ef74659796d3f2559fcb9
rename to .git_disabled/objects/b5/9d1ba1f7c34f80721ef74659796d3f2559fcb9
diff --git a/mall/.git_disabled/objects/b5/d595a0bd414c1a33a4884ed891f593fab323e1 b/.git_disabled/objects/b5/d595a0bd414c1a33a4884ed891f593fab323e1
similarity index 100%
rename from mall/.git_disabled/objects/b5/d595a0bd414c1a33a4884ed891f593fab323e1
rename to .git_disabled/objects/b5/d595a0bd414c1a33a4884ed891f593fab323e1
diff --git a/mall/.git_disabled/objects/b6/05c2aa7cec0a7b660e4e37d6dff14f28b5f865 b/.git_disabled/objects/b6/05c2aa7cec0a7b660e4e37d6dff14f28b5f865
similarity index 100%
rename from mall/.git_disabled/objects/b6/05c2aa7cec0a7b660e4e37d6dff14f28b5f865
rename to .git_disabled/objects/b6/05c2aa7cec0a7b660e4e37d6dff14f28b5f865
diff --git a/mall/.git_disabled/objects/b6/200cda285b50c855c9b7b5c9ddf5e1aec8f74e b/.git_disabled/objects/b6/200cda285b50c855c9b7b5c9ddf5e1aec8f74e
similarity index 100%
rename from mall/.git_disabled/objects/b6/200cda285b50c855c9b7b5c9ddf5e1aec8f74e
rename to .git_disabled/objects/b6/200cda285b50c855c9b7b5c9ddf5e1aec8f74e
diff --git a/mall/.git_disabled/objects/b6/34c762b30e72de14209ca03c40039c9b0e0ae4 b/.git_disabled/objects/b6/34c762b30e72de14209ca03c40039c9b0e0ae4
similarity index 100%
rename from mall/.git_disabled/objects/b6/34c762b30e72de14209ca03c40039c9b0e0ae4
rename to .git_disabled/objects/b6/34c762b30e72de14209ca03c40039c9b0e0ae4
diff --git a/mall/.git_disabled/objects/b6/44120ca6e565ed49b04b6741c1932f0a32a128 b/.git_disabled/objects/b6/44120ca6e565ed49b04b6741c1932f0a32a128
similarity index 100%
rename from mall/.git_disabled/objects/b6/44120ca6e565ed49b04b6741c1932f0a32a128
rename to .git_disabled/objects/b6/44120ca6e565ed49b04b6741c1932f0a32a128
diff --git a/mall/.git_disabled/objects/b7/740adb528068e45757fbe3172b56dbe0f8b2c0 b/.git_disabled/objects/b7/740adb528068e45757fbe3172b56dbe0f8b2c0
similarity index 100%
rename from mall/.git_disabled/objects/b7/740adb528068e45757fbe3172b56dbe0f8b2c0
rename to .git_disabled/objects/b7/740adb528068e45757fbe3172b56dbe0f8b2c0
diff --git a/mall/.git_disabled/objects/b7/cd10d93f8256a17b92764d4250fccb19253723 b/.git_disabled/objects/b7/cd10d93f8256a17b92764d4250fccb19253723
similarity index 100%
rename from mall/.git_disabled/objects/b7/cd10d93f8256a17b92764d4250fccb19253723
rename to .git_disabled/objects/b7/cd10d93f8256a17b92764d4250fccb19253723
diff --git a/mall/.git_disabled/objects/b8/a1d782699a691668ea82b718ff78efbe60e31c b/.git_disabled/objects/b8/a1d782699a691668ea82b718ff78efbe60e31c
similarity index 100%
rename from mall/.git_disabled/objects/b8/a1d782699a691668ea82b718ff78efbe60e31c
rename to .git_disabled/objects/b8/a1d782699a691668ea82b718ff78efbe60e31c
diff --git a/mall/.git_disabled/objects/b9/887de60894ab6aa5bea2a1c4c1811961d71ce9 b/.git_disabled/objects/b9/887de60894ab6aa5bea2a1c4c1811961d71ce9
similarity index 100%
rename from mall/.git_disabled/objects/b9/887de60894ab6aa5bea2a1c4c1811961d71ce9
rename to .git_disabled/objects/b9/887de60894ab6aa5bea2a1c4c1811961d71ce9
diff --git a/mall/.git_disabled/objects/b9/c605fdca0a60d7ccab0d2c6c5105575a84df3e b/.git_disabled/objects/b9/c605fdca0a60d7ccab0d2c6c5105575a84df3e
similarity index 100%
rename from mall/.git_disabled/objects/b9/c605fdca0a60d7ccab0d2c6c5105575a84df3e
rename to .git_disabled/objects/b9/c605fdca0a60d7ccab0d2c6c5105575a84df3e
diff --git a/mall/.git_disabled/objects/b9/df9aeb02ca41b48966f098ff489ff7c0ed9f85 b/.git_disabled/objects/b9/df9aeb02ca41b48966f098ff489ff7c0ed9f85
similarity index 100%
rename from mall/.git_disabled/objects/b9/df9aeb02ca41b48966f098ff489ff7c0ed9f85
rename to .git_disabled/objects/b9/df9aeb02ca41b48966f098ff489ff7c0ed9f85
diff --git a/mall/.git_disabled/objects/ba/2aa9ff7c5e126b80a3c65e6f2212b87b65a55e b/.git_disabled/objects/ba/2aa9ff7c5e126b80a3c65e6f2212b87b65a55e
similarity index 100%
rename from mall/.git_disabled/objects/ba/2aa9ff7c5e126b80a3c65e6f2212b87b65a55e
rename to .git_disabled/objects/ba/2aa9ff7c5e126b80a3c65e6f2212b87b65a55e
diff --git a/mall/.git_disabled/objects/ba/62dcbe0ca8ad654833741cd195254a47bb8510 b/.git_disabled/objects/ba/62dcbe0ca8ad654833741cd195254a47bb8510
similarity index 100%
rename from mall/.git_disabled/objects/ba/62dcbe0ca8ad654833741cd195254a47bb8510
rename to .git_disabled/objects/ba/62dcbe0ca8ad654833741cd195254a47bb8510
diff --git a/mall/.git_disabled/objects/ba/c5393914ad73706c63ea0f622b2d2bc997ee1a b/.git_disabled/objects/ba/c5393914ad73706c63ea0f622b2d2bc997ee1a
similarity index 100%
rename from mall/.git_disabled/objects/ba/c5393914ad73706c63ea0f622b2d2bc997ee1a
rename to .git_disabled/objects/ba/c5393914ad73706c63ea0f622b2d2bc997ee1a
diff --git a/mall/.git_disabled/objects/ba/e5a1276f4de06eba8e26a0639641bda4a7e9ba b/.git_disabled/objects/ba/e5a1276f4de06eba8e26a0639641bda4a7e9ba
similarity index 100%
rename from mall/.git_disabled/objects/ba/e5a1276f4de06eba8e26a0639641bda4a7e9ba
rename to .git_disabled/objects/ba/e5a1276f4de06eba8e26a0639641bda4a7e9ba
diff --git a/mall/.git_disabled/objects/bb/8abb48fd457cb3cb0b8be244fd466b3af7740e b/.git_disabled/objects/bb/8abb48fd457cb3cb0b8be244fd466b3af7740e
similarity index 100%
rename from mall/.git_disabled/objects/bb/8abb48fd457cb3cb0b8be244fd466b3af7740e
rename to .git_disabled/objects/bb/8abb48fd457cb3cb0b8be244fd466b3af7740e
diff --git a/mall/.git_disabled/objects/bb/db9b58fe632b75c886ea52951ba855b3dfdfe0 b/.git_disabled/objects/bb/db9b58fe632b75c886ea52951ba855b3dfdfe0
similarity index 100%
rename from mall/.git_disabled/objects/bb/db9b58fe632b75c886ea52951ba855b3dfdfe0
rename to .git_disabled/objects/bb/db9b58fe632b75c886ea52951ba855b3dfdfe0
diff --git a/mall/.git_disabled/objects/bb/e687e533b14cce1eaca24cfc7ebcccc0f022a6 b/.git_disabled/objects/bb/e687e533b14cce1eaca24cfc7ebcccc0f022a6
similarity index 100%
rename from mall/.git_disabled/objects/bb/e687e533b14cce1eaca24cfc7ebcccc0f022a6
rename to .git_disabled/objects/bb/e687e533b14cce1eaca24cfc7ebcccc0f022a6
diff --git a/mall/.git_disabled/objects/bd/066495c9cce3917a5971fa7c7ba69d836cc86a b/.git_disabled/objects/bd/066495c9cce3917a5971fa7c7ba69d836cc86a
similarity index 100%
rename from mall/.git_disabled/objects/bd/066495c9cce3917a5971fa7c7ba69d836cc86a
rename to .git_disabled/objects/bd/066495c9cce3917a5971fa7c7ba69d836cc86a
diff --git a/mall/.git_disabled/objects/be/68b9be75bbf434039a481b2392b2791375e910 b/.git_disabled/objects/be/68b9be75bbf434039a481b2392b2791375e910
similarity index 100%
rename from mall/.git_disabled/objects/be/68b9be75bbf434039a481b2392b2791375e910
rename to .git_disabled/objects/be/68b9be75bbf434039a481b2392b2791375e910
diff --git a/mall/.git_disabled/objects/be/71360a2d8c4c16331ef285f2c95985e6b4f7a9 b/.git_disabled/objects/be/71360a2d8c4c16331ef285f2c95985e6b4f7a9
similarity index 100%
rename from mall/.git_disabled/objects/be/71360a2d8c4c16331ef285f2c95985e6b4f7a9
rename to .git_disabled/objects/be/71360a2d8c4c16331ef285f2c95985e6b4f7a9
diff --git a/mall/.git_disabled/objects/be/78f7213596253a4ba6dcd31385910bced87b89 b/.git_disabled/objects/be/78f7213596253a4ba6dcd31385910bced87b89
similarity index 100%
rename from mall/.git_disabled/objects/be/78f7213596253a4ba6dcd31385910bced87b89
rename to .git_disabled/objects/be/78f7213596253a4ba6dcd31385910bced87b89
diff --git a/mall/.git_disabled/objects/be/8f83586cc1d00f621acbc721a83c15f6ffbca4 b/.git_disabled/objects/be/8f83586cc1d00f621acbc721a83c15f6ffbca4
similarity index 100%
rename from mall/.git_disabled/objects/be/8f83586cc1d00f621acbc721a83c15f6ffbca4
rename to .git_disabled/objects/be/8f83586cc1d00f621acbc721a83c15f6ffbca4
diff --git a/mall/.git_disabled/objects/be/90f1213bf8ef5948faf6a77e18f4eb533a556a b/.git_disabled/objects/be/90f1213bf8ef5948faf6a77e18f4eb533a556a
similarity index 100%
rename from mall/.git_disabled/objects/be/90f1213bf8ef5948faf6a77e18f4eb533a556a
rename to .git_disabled/objects/be/90f1213bf8ef5948faf6a77e18f4eb533a556a
diff --git a/mall/.git_disabled/objects/be/ecb3bb03da266c02ffadae52e694bd710fa04e b/.git_disabled/objects/be/ecb3bb03da266c02ffadae52e694bd710fa04e
similarity index 100%
rename from mall/.git_disabled/objects/be/ecb3bb03da266c02ffadae52e694bd710fa04e
rename to .git_disabled/objects/be/ecb3bb03da266c02ffadae52e694bd710fa04e
diff --git a/mall/.git_disabled/objects/bf/17addbcdc94359cc58eebeb0dfaf969ecf11f1 b/.git_disabled/objects/bf/17addbcdc94359cc58eebeb0dfaf969ecf11f1
similarity index 100%
rename from mall/.git_disabled/objects/bf/17addbcdc94359cc58eebeb0dfaf969ecf11f1
rename to .git_disabled/objects/bf/17addbcdc94359cc58eebeb0dfaf969ecf11f1
diff --git a/mall/.git_disabled/objects/bf/9255c99be9a957e9401419a59b7296963ca8c5 b/.git_disabled/objects/bf/9255c99be9a957e9401419a59b7296963ca8c5
similarity index 100%
rename from mall/.git_disabled/objects/bf/9255c99be9a957e9401419a59b7296963ca8c5
rename to .git_disabled/objects/bf/9255c99be9a957e9401419a59b7296963ca8c5
diff --git a/mall/.git_disabled/objects/bf/a4aa8254cb94219abf03bafb1fda1e0e1397b2 b/.git_disabled/objects/bf/a4aa8254cb94219abf03bafb1fda1e0e1397b2
similarity index 100%
rename from mall/.git_disabled/objects/bf/a4aa8254cb94219abf03bafb1fda1e0e1397b2
rename to .git_disabled/objects/bf/a4aa8254cb94219abf03bafb1fda1e0e1397b2
diff --git a/mall/.git_disabled/objects/c0/7e0e02d0261d06f1abfc680fc0710798df9cdf b/.git_disabled/objects/c0/7e0e02d0261d06f1abfc680fc0710798df9cdf
similarity index 100%
rename from mall/.git_disabled/objects/c0/7e0e02d0261d06f1abfc680fc0710798df9cdf
rename to .git_disabled/objects/c0/7e0e02d0261d06f1abfc680fc0710798df9cdf
diff --git a/mall/.git_disabled/objects/c0/a444436318d393b0961f3bd309abcf098086c9 b/.git_disabled/objects/c0/a444436318d393b0961f3bd309abcf098086c9
similarity index 100%
rename from mall/.git_disabled/objects/c0/a444436318d393b0961f3bd309abcf098086c9
rename to .git_disabled/objects/c0/a444436318d393b0961f3bd309abcf098086c9
diff --git a/mall/.git_disabled/objects/c0/a82f29dee0fefca9f57f0b34e7804af0b38692 b/.git_disabled/objects/c0/a82f29dee0fefca9f57f0b34e7804af0b38692
similarity index 100%
rename from mall/.git_disabled/objects/c0/a82f29dee0fefca9f57f0b34e7804af0b38692
rename to .git_disabled/objects/c0/a82f29dee0fefca9f57f0b34e7804af0b38692
diff --git a/mall/.git_disabled/objects/c2/bf505ea7673e41a3256c9413c30b4b57636fd3 b/.git_disabled/objects/c2/bf505ea7673e41a3256c9413c30b4b57636fd3
similarity index 100%
rename from mall/.git_disabled/objects/c2/bf505ea7673e41a3256c9413c30b4b57636fd3
rename to .git_disabled/objects/c2/bf505ea7673e41a3256c9413c30b4b57636fd3
diff --git a/mall/.git_disabled/objects/c4/96dbc9f752249ada7492dbf8be9c9d2c8354e8 b/.git_disabled/objects/c4/96dbc9f752249ada7492dbf8be9c9d2c8354e8
similarity index 100%
rename from mall/.git_disabled/objects/c4/96dbc9f752249ada7492dbf8be9c9d2c8354e8
rename to .git_disabled/objects/c4/96dbc9f752249ada7492dbf8be9c9d2c8354e8
diff --git a/mall/.git_disabled/objects/c5/255450c9c25046ab37927ebb3e36a0caf3060a b/.git_disabled/objects/c5/255450c9c25046ab37927ebb3e36a0caf3060a
similarity index 100%
rename from mall/.git_disabled/objects/c5/255450c9c25046ab37927ebb3e36a0caf3060a
rename to .git_disabled/objects/c5/255450c9c25046ab37927ebb3e36a0caf3060a
diff --git a/mall/.git_disabled/objects/c5/55321e256b3ab936aa6975ab489e04cd4ff616 b/.git_disabled/objects/c5/55321e256b3ab936aa6975ab489e04cd4ff616
similarity index 100%
rename from mall/.git_disabled/objects/c5/55321e256b3ab936aa6975ab489e04cd4ff616
rename to .git_disabled/objects/c5/55321e256b3ab936aa6975ab489e04cd4ff616
diff --git a/mall/.git_disabled/objects/c5/57a93dbaf06781e7a0654655784979671e6fad b/.git_disabled/objects/c5/57a93dbaf06781e7a0654655784979671e6fad
similarity index 100%
rename from mall/.git_disabled/objects/c5/57a93dbaf06781e7a0654655784979671e6fad
rename to .git_disabled/objects/c5/57a93dbaf06781e7a0654655784979671e6fad
diff --git a/mall/.git_disabled/objects/c5/862c5fedc5e084177e9e76ff8d3b4b9d186512 b/.git_disabled/objects/c5/862c5fedc5e084177e9e76ff8d3b4b9d186512
similarity index 100%
rename from mall/.git_disabled/objects/c5/862c5fedc5e084177e9e76ff8d3b4b9d186512
rename to .git_disabled/objects/c5/862c5fedc5e084177e9e76ff8d3b4b9d186512
diff --git a/mall/.git_disabled/objects/c6/8c0e751bb47ed020d24a154c3ebf7872af903b b/.git_disabled/objects/c6/8c0e751bb47ed020d24a154c3ebf7872af903b
similarity index 100%
rename from mall/.git_disabled/objects/c6/8c0e751bb47ed020d24a154c3ebf7872af903b
rename to .git_disabled/objects/c6/8c0e751bb47ed020d24a154c3ebf7872af903b
diff --git a/mall/.git_disabled/objects/c6/b5d35b39ce47f9284694c38ae74310e21b81b2 b/.git_disabled/objects/c6/b5d35b39ce47f9284694c38ae74310e21b81b2
similarity index 100%
rename from mall/.git_disabled/objects/c6/b5d35b39ce47f9284694c38ae74310e21b81b2
rename to .git_disabled/objects/c6/b5d35b39ce47f9284694c38ae74310e21b81b2
diff --git a/mall/.git_disabled/objects/c6/fd344a5d41140b114b26a8a338c7a4c14bd14f b/.git_disabled/objects/c6/fd344a5d41140b114b26a8a338c7a4c14bd14f
similarity index 100%
rename from mall/.git_disabled/objects/c6/fd344a5d41140b114b26a8a338c7a4c14bd14f
rename to .git_disabled/objects/c6/fd344a5d41140b114b26a8a338c7a4c14bd14f
diff --git a/mall/.git_disabled/objects/c7/47221ab2ee46d32eb5507b3a47331505da9553 b/.git_disabled/objects/c7/47221ab2ee46d32eb5507b3a47331505da9553
similarity index 100%
rename from mall/.git_disabled/objects/c7/47221ab2ee46d32eb5507b3a47331505da9553
rename to .git_disabled/objects/c7/47221ab2ee46d32eb5507b3a47331505da9553
diff --git a/mall/.git_disabled/objects/c7/d188b7021bbf38a0bcbcd6a0d57dd3c59621ee b/.git_disabled/objects/c7/d188b7021bbf38a0bcbcd6a0d57dd3c59621ee
similarity index 100%
rename from mall/.git_disabled/objects/c7/d188b7021bbf38a0bcbcd6a0d57dd3c59621ee
rename to .git_disabled/objects/c7/d188b7021bbf38a0bcbcd6a0d57dd3c59621ee
diff --git a/mall/.git_disabled/objects/c8/03a77c8fc16e7b18100a46a24bc4947c86843d b/.git_disabled/objects/c8/03a77c8fc16e7b18100a46a24bc4947c86843d
similarity index 100%
rename from mall/.git_disabled/objects/c8/03a77c8fc16e7b18100a46a24bc4947c86843d
rename to .git_disabled/objects/c8/03a77c8fc16e7b18100a46a24bc4947c86843d
diff --git a/mall/.git_disabled/objects/c8/506011bfdb818cb321d0fc48acacecf0e3d872 b/.git_disabled/objects/c8/506011bfdb818cb321d0fc48acacecf0e3d872
similarity index 100%
rename from mall/.git_disabled/objects/c8/506011bfdb818cb321d0fc48acacecf0e3d872
rename to .git_disabled/objects/c8/506011bfdb818cb321d0fc48acacecf0e3d872
diff --git a/mall/.git_disabled/objects/c8/677694ddc2a1d5296299f350c9d1bbb2f35d8f b/.git_disabled/objects/c8/677694ddc2a1d5296299f350c9d1bbb2f35d8f
similarity index 100%
rename from mall/.git_disabled/objects/c8/677694ddc2a1d5296299f350c9d1bbb2f35d8f
rename to .git_disabled/objects/c8/677694ddc2a1d5296299f350c9d1bbb2f35d8f
diff --git a/mall/.git_disabled/objects/c9/8e640608a6881a2c007c5f7e55909b44a5310e b/.git_disabled/objects/c9/8e640608a6881a2c007c5f7e55909b44a5310e
similarity index 100%
rename from mall/.git_disabled/objects/c9/8e640608a6881a2c007c5f7e55909b44a5310e
rename to .git_disabled/objects/c9/8e640608a6881a2c007c5f7e55909b44a5310e
diff --git a/mall/.git_disabled/objects/cb/4d5aa2c84df053512615a1e5fa913912420cc6 b/.git_disabled/objects/cb/4d5aa2c84df053512615a1e5fa913912420cc6
similarity index 100%
rename from mall/.git_disabled/objects/cb/4d5aa2c84df053512615a1e5fa913912420cc6
rename to .git_disabled/objects/cb/4d5aa2c84df053512615a1e5fa913912420cc6
diff --git a/mall/.git_disabled/objects/cc/428e74dcf7ed21d0f19bda36be359f77cad148 b/.git_disabled/objects/cc/428e74dcf7ed21d0f19bda36be359f77cad148
similarity index 100%
rename from mall/.git_disabled/objects/cc/428e74dcf7ed21d0f19bda36be359f77cad148
rename to .git_disabled/objects/cc/428e74dcf7ed21d0f19bda36be359f77cad148
diff --git a/mall/.git_disabled/objects/cc/f25259547a8f3b6026a988b70a4d06b5c84c36 b/.git_disabled/objects/cc/f25259547a8f3b6026a988b70a4d06b5c84c36
similarity index 100%
rename from mall/.git_disabled/objects/cc/f25259547a8f3b6026a988b70a4d06b5c84c36
rename to .git_disabled/objects/cc/f25259547a8f3b6026a988b70a4d06b5c84c36
diff --git a/mall/.git_disabled/objects/cd/35b39fae023e0134f38ebd482366a2bb346556 b/.git_disabled/objects/cd/35b39fae023e0134f38ebd482366a2bb346556
similarity index 100%
rename from mall/.git_disabled/objects/cd/35b39fae023e0134f38ebd482366a2bb346556
rename to .git_disabled/objects/cd/35b39fae023e0134f38ebd482366a2bb346556
diff --git a/mall/.git_disabled/objects/cd/a2729cb49f56dd5afde5fb34bdbfccb4ccea25 b/.git_disabled/objects/cd/a2729cb49f56dd5afde5fb34bdbfccb4ccea25
similarity index 100%
rename from mall/.git_disabled/objects/cd/a2729cb49f56dd5afde5fb34bdbfccb4ccea25
rename to .git_disabled/objects/cd/a2729cb49f56dd5afde5fb34bdbfccb4ccea25
diff --git a/mall/.git_disabled/objects/ce/29a322629863516a22ce51658cd0fbfcadf5a7 b/.git_disabled/objects/ce/29a322629863516a22ce51658cd0fbfcadf5a7
similarity index 100%
rename from mall/.git_disabled/objects/ce/29a322629863516a22ce51658cd0fbfcadf5a7
rename to .git_disabled/objects/ce/29a322629863516a22ce51658cd0fbfcadf5a7
diff --git a/mall/.git_disabled/objects/ce/30fb618f719703864ec1d5ebd3d834580fc563 b/.git_disabled/objects/ce/30fb618f719703864ec1d5ebd3d834580fc563
similarity index 100%
rename from mall/.git_disabled/objects/ce/30fb618f719703864ec1d5ebd3d834580fc563
rename to .git_disabled/objects/ce/30fb618f719703864ec1d5ebd3d834580fc563
diff --git a/mall/.git_disabled/objects/ce/7e9fedfdf6542125f3176572bcf08c42f9f850 b/.git_disabled/objects/ce/7e9fedfdf6542125f3176572bcf08c42f9f850
similarity index 100%
rename from mall/.git_disabled/objects/ce/7e9fedfdf6542125f3176572bcf08c42f9f850
rename to .git_disabled/objects/ce/7e9fedfdf6542125f3176572bcf08c42f9f850
diff --git a/mall/.git_disabled/objects/ce/dc574102b9c0e727db05477123e31050d7d5b5 b/.git_disabled/objects/ce/dc574102b9c0e727db05477123e31050d7d5b5
similarity index 100%
rename from mall/.git_disabled/objects/ce/dc574102b9c0e727db05477123e31050d7d5b5
rename to .git_disabled/objects/ce/dc574102b9c0e727db05477123e31050d7d5b5
diff --git a/mall/.git_disabled/objects/cf/f54d39455c1c52b2f8f57105f4cd44e6b25c1e b/.git_disabled/objects/cf/f54d39455c1c52b2f8f57105f4cd44e6b25c1e
similarity index 100%
rename from mall/.git_disabled/objects/cf/f54d39455c1c52b2f8f57105f4cd44e6b25c1e
rename to .git_disabled/objects/cf/f54d39455c1c52b2f8f57105f4cd44e6b25c1e
diff --git a/mall/.git_disabled/objects/d0/083f0ea936b54764267b5514ad871ba22a9056 b/.git_disabled/objects/d0/083f0ea936b54764267b5514ad871ba22a9056
similarity index 100%
rename from mall/.git_disabled/objects/d0/083f0ea936b54764267b5514ad871ba22a9056
rename to .git_disabled/objects/d0/083f0ea936b54764267b5514ad871ba22a9056
diff --git a/mall/.git_disabled/objects/d0/1e3bfaee310616a8881c7903d83bff5792b8a5 b/.git_disabled/objects/d0/1e3bfaee310616a8881c7903d83bff5792b8a5
similarity index 100%
rename from mall/.git_disabled/objects/d0/1e3bfaee310616a8881c7903d83bff5792b8a5
rename to .git_disabled/objects/d0/1e3bfaee310616a8881c7903d83bff5792b8a5
diff --git a/mall/.git_disabled/objects/d0/53ad24d24a1ae4b38b04ec9ed98a092ed2f7b2 b/.git_disabled/objects/d0/53ad24d24a1ae4b38b04ec9ed98a092ed2f7b2
similarity index 100%
rename from mall/.git_disabled/objects/d0/53ad24d24a1ae4b38b04ec9ed98a092ed2f7b2
rename to .git_disabled/objects/d0/53ad24d24a1ae4b38b04ec9ed98a092ed2f7b2
diff --git a/mall/.git_disabled/objects/d0/74d86dadf34f92a3479d11071c37be9e6982dd b/.git_disabled/objects/d0/74d86dadf34f92a3479d11071c37be9e6982dd
similarity index 100%
rename from mall/.git_disabled/objects/d0/74d86dadf34f92a3479d11071c37be9e6982dd
rename to .git_disabled/objects/d0/74d86dadf34f92a3479d11071c37be9e6982dd
diff --git a/mall/.git_disabled/objects/d0/94e1a994cfe4680121a1aece838ffe8a9d3f62 b/.git_disabled/objects/d0/94e1a994cfe4680121a1aece838ffe8a9d3f62
similarity index 100%
rename from mall/.git_disabled/objects/d0/94e1a994cfe4680121a1aece838ffe8a9d3f62
rename to .git_disabled/objects/d0/94e1a994cfe4680121a1aece838ffe8a9d3f62
diff --git a/mall/.git_disabled/objects/d0/fcd3dce392e103f2056197e689cf35d002761d b/.git_disabled/objects/d0/fcd3dce392e103f2056197e689cf35d002761d
similarity index 100%
rename from mall/.git_disabled/objects/d0/fcd3dce392e103f2056197e689cf35d002761d
rename to .git_disabled/objects/d0/fcd3dce392e103f2056197e689cf35d002761d
diff --git a/mall/.git_disabled/objects/d1/66519b19317188b50596fd07e6d1d3f30300f9 b/.git_disabled/objects/d1/66519b19317188b50596fd07e6d1d3f30300f9
similarity index 100%
rename from mall/.git_disabled/objects/d1/66519b19317188b50596fd07e6d1d3f30300f9
rename to .git_disabled/objects/d1/66519b19317188b50596fd07e6d1d3f30300f9
diff --git a/mall/.git_disabled/objects/d2/17ab279178d653b36916619db16d283e96d739 b/.git_disabled/objects/d2/17ab279178d653b36916619db16d283e96d739
similarity index 100%
rename from mall/.git_disabled/objects/d2/17ab279178d653b36916619db16d283e96d739
rename to .git_disabled/objects/d2/17ab279178d653b36916619db16d283e96d739
diff --git a/mall/.git_disabled/objects/d2/29ca3d9d7824f9f7dd387525f5c6bc879232f8 b/.git_disabled/objects/d2/29ca3d9d7824f9f7dd387525f5c6bc879232f8
similarity index 100%
rename from mall/.git_disabled/objects/d2/29ca3d9d7824f9f7dd387525f5c6bc879232f8
rename to .git_disabled/objects/d2/29ca3d9d7824f9f7dd387525f5c6bc879232f8
diff --git a/mall/.git_disabled/objects/d2/6ae394d9750f38b975b00c9f9aae2d2511b0d3 b/.git_disabled/objects/d2/6ae394d9750f38b975b00c9f9aae2d2511b0d3
similarity index 100%
rename from mall/.git_disabled/objects/d2/6ae394d9750f38b975b00c9f9aae2d2511b0d3
rename to .git_disabled/objects/d2/6ae394d9750f38b975b00c9f9aae2d2511b0d3
diff --git a/mall/.git_disabled/objects/d2/9a1fa6fa82a1627bc8f3581d25be1157261268 b/.git_disabled/objects/d2/9a1fa6fa82a1627bc8f3581d25be1157261268
similarity index 100%
rename from mall/.git_disabled/objects/d2/9a1fa6fa82a1627bc8f3581d25be1157261268
rename to .git_disabled/objects/d2/9a1fa6fa82a1627bc8f3581d25be1157261268
diff --git a/mall/.git_disabled/objects/d3/7688eeb7d942ed81a6a575a58545d754f39820 b/.git_disabled/objects/d3/7688eeb7d942ed81a6a575a58545d754f39820
similarity index 100%
rename from mall/.git_disabled/objects/d3/7688eeb7d942ed81a6a575a58545d754f39820
rename to .git_disabled/objects/d3/7688eeb7d942ed81a6a575a58545d754f39820
diff --git a/mall/.git_disabled/objects/d3/a5b3e29a55feaaaa3628d7ae2b3d4c2552b38d b/.git_disabled/objects/d3/a5b3e29a55feaaaa3628d7ae2b3d4c2552b38d
similarity index 100%
rename from mall/.git_disabled/objects/d3/a5b3e29a55feaaaa3628d7ae2b3d4c2552b38d
rename to .git_disabled/objects/d3/a5b3e29a55feaaaa3628d7ae2b3d4c2552b38d
diff --git a/mall/.git_disabled/objects/d3/c7847f794643256c56e51b527c537aa2c81c90 b/.git_disabled/objects/d3/c7847f794643256c56e51b527c537aa2c81c90
similarity index 100%
rename from mall/.git_disabled/objects/d3/c7847f794643256c56e51b527c537aa2c81c90
rename to .git_disabled/objects/d3/c7847f794643256c56e51b527c537aa2c81c90
diff --git a/mall/.git_disabled/objects/d4/42cb3b681694a14efa08f61722d53c3cd03323 b/.git_disabled/objects/d4/42cb3b681694a14efa08f61722d53c3cd03323
similarity index 100%
rename from mall/.git_disabled/objects/d4/42cb3b681694a14efa08f61722d53c3cd03323
rename to .git_disabled/objects/d4/42cb3b681694a14efa08f61722d53c3cd03323
diff --git a/mall/.git_disabled/objects/d4/5d8d18e90407e3bae17dae36c6b928719e7be3 b/.git_disabled/objects/d4/5d8d18e90407e3bae17dae36c6b928719e7be3
similarity index 100%
rename from mall/.git_disabled/objects/d4/5d8d18e90407e3bae17dae36c6b928719e7be3
rename to .git_disabled/objects/d4/5d8d18e90407e3bae17dae36c6b928719e7be3
diff --git a/mall/.git_disabled/objects/d5/16ccd139d0a84699e158c83af106efc1b9f4dd b/.git_disabled/objects/d5/16ccd139d0a84699e158c83af106efc1b9f4dd
similarity index 100%
rename from mall/.git_disabled/objects/d5/16ccd139d0a84699e158c83af106efc1b9f4dd
rename to .git_disabled/objects/d5/16ccd139d0a84699e158c83af106efc1b9f4dd
diff --git a/mall/.git_disabled/objects/d5/7592ca7d17ce3d209458375b3de10683099cca b/.git_disabled/objects/d5/7592ca7d17ce3d209458375b3de10683099cca
similarity index 100%
rename from mall/.git_disabled/objects/d5/7592ca7d17ce3d209458375b3de10683099cca
rename to .git_disabled/objects/d5/7592ca7d17ce3d209458375b3de10683099cca
diff --git a/mall/.git_disabled/objects/d5/a3a4e8f06dbeac70a06b73f58743d481d48742 b/.git_disabled/objects/d5/a3a4e8f06dbeac70a06b73f58743d481d48742
similarity index 100%
rename from mall/.git_disabled/objects/d5/a3a4e8f06dbeac70a06b73f58743d481d48742
rename to .git_disabled/objects/d5/a3a4e8f06dbeac70a06b73f58743d481d48742
diff --git a/mall/.git_disabled/objects/d6/2bb723d93c8fd83776a74941258e1a72a8b66f b/.git_disabled/objects/d6/2bb723d93c8fd83776a74941258e1a72a8b66f
similarity index 100%
rename from mall/.git_disabled/objects/d6/2bb723d93c8fd83776a74941258e1a72a8b66f
rename to .git_disabled/objects/d6/2bb723d93c8fd83776a74941258e1a72a8b66f
diff --git a/mall/.git_disabled/objects/d6/65c7eda68685c134fc9c4f1338fcd8bac7285c b/.git_disabled/objects/d6/65c7eda68685c134fc9c4f1338fcd8bac7285c
similarity index 100%
rename from mall/.git_disabled/objects/d6/65c7eda68685c134fc9c4f1338fcd8bac7285c
rename to .git_disabled/objects/d6/65c7eda68685c134fc9c4f1338fcd8bac7285c
diff --git a/mall/.git_disabled/objects/d7/29d857cf6cf273ae9828cfa5e045603c0c5d61 b/.git_disabled/objects/d7/29d857cf6cf273ae9828cfa5e045603c0c5d61
similarity index 100%
rename from mall/.git_disabled/objects/d7/29d857cf6cf273ae9828cfa5e045603c0c5d61
rename to .git_disabled/objects/d7/29d857cf6cf273ae9828cfa5e045603c0c5d61
diff --git a/mall/.git_disabled/objects/d7/c5f17aae8b068b15dfcb91875bb43adbeb20bb b/.git_disabled/objects/d7/c5f17aae8b068b15dfcb91875bb43adbeb20bb
similarity index 100%
rename from mall/.git_disabled/objects/d7/c5f17aae8b068b15dfcb91875bb43adbeb20bb
rename to .git_disabled/objects/d7/c5f17aae8b068b15dfcb91875bb43adbeb20bb
diff --git a/mall/.git_disabled/objects/d8/7cb8ab35d0bdd30e5cdec65d014965b6341f50 b/.git_disabled/objects/d8/7cb8ab35d0bdd30e5cdec65d014965b6341f50
similarity index 100%
rename from mall/.git_disabled/objects/d8/7cb8ab35d0bdd30e5cdec65d014965b6341f50
rename to .git_disabled/objects/d8/7cb8ab35d0bdd30e5cdec65d014965b6341f50
diff --git a/mall/.git_disabled/objects/d8/8b642424b4b1e5b50b40ebab41b83723b6b7b8 b/.git_disabled/objects/d8/8b642424b4b1e5b50b40ebab41b83723b6b7b8
similarity index 100%
rename from mall/.git_disabled/objects/d8/8b642424b4b1e5b50b40ebab41b83723b6b7b8
rename to .git_disabled/objects/d8/8b642424b4b1e5b50b40ebab41b83723b6b7b8
diff --git a/mall/.git_disabled/objects/d8/8f1c206f3375dac7dce5bc1b0ef45fed058837 b/.git_disabled/objects/d8/8f1c206f3375dac7dce5bc1b0ef45fed058837
similarity index 100%
rename from mall/.git_disabled/objects/d8/8f1c206f3375dac7dce5bc1b0ef45fed058837
rename to .git_disabled/objects/d8/8f1c206f3375dac7dce5bc1b0ef45fed058837
diff --git a/mall/.git_disabled/objects/d9/0b5c9093f704aca73664fcd132e03ed2ff115e b/.git_disabled/objects/d9/0b5c9093f704aca73664fcd132e03ed2ff115e
similarity index 100%
rename from mall/.git_disabled/objects/d9/0b5c9093f704aca73664fcd132e03ed2ff115e
rename to .git_disabled/objects/d9/0b5c9093f704aca73664fcd132e03ed2ff115e
diff --git a/mall/.git_disabled/objects/d9/24957329276367c6bae3d982099edd7348b460 b/.git_disabled/objects/d9/24957329276367c6bae3d982099edd7348b460
similarity index 100%
rename from mall/.git_disabled/objects/d9/24957329276367c6bae3d982099edd7348b460
rename to .git_disabled/objects/d9/24957329276367c6bae3d982099edd7348b460
diff --git a/mall/.git_disabled/objects/d9/6e6e2afa6e66fc91ad01eedd026643be470334 b/.git_disabled/objects/d9/6e6e2afa6e66fc91ad01eedd026643be470334
similarity index 100%
rename from mall/.git_disabled/objects/d9/6e6e2afa6e66fc91ad01eedd026643be470334
rename to .git_disabled/objects/d9/6e6e2afa6e66fc91ad01eedd026643be470334
diff --git a/mall/.git_disabled/objects/db/7b454b402fc847804220358387f7c6582d938e b/.git_disabled/objects/db/7b454b402fc847804220358387f7c6582d938e
similarity index 100%
rename from mall/.git_disabled/objects/db/7b454b402fc847804220358387f7c6582d938e
rename to .git_disabled/objects/db/7b454b402fc847804220358387f7c6582d938e
diff --git a/mall/.git_disabled/objects/dc/69972b03973448aaca03859a32db7c7ac069c1 b/.git_disabled/objects/dc/69972b03973448aaca03859a32db7c7ac069c1
similarity index 100%
rename from mall/.git_disabled/objects/dc/69972b03973448aaca03859a32db7c7ac069c1
rename to .git_disabled/objects/dc/69972b03973448aaca03859a32db7c7ac069c1
diff --git a/mall/.git_disabled/objects/dc/7cadc19b0f9cd06bfe54f0310383ae8c4ee8da b/.git_disabled/objects/dc/7cadc19b0f9cd06bfe54f0310383ae8c4ee8da
similarity index 100%
rename from mall/.git_disabled/objects/dc/7cadc19b0f9cd06bfe54f0310383ae8c4ee8da
rename to .git_disabled/objects/dc/7cadc19b0f9cd06bfe54f0310383ae8c4ee8da
diff --git a/mall/.git_disabled/objects/dc/b29cfaaa8445902b94cea9fdef216bf2316b7a b/.git_disabled/objects/dc/b29cfaaa8445902b94cea9fdef216bf2316b7a
similarity index 100%
rename from mall/.git_disabled/objects/dc/b29cfaaa8445902b94cea9fdef216bf2316b7a
rename to .git_disabled/objects/dc/b29cfaaa8445902b94cea9fdef216bf2316b7a
diff --git a/mall/.git_disabled/objects/dc/c5c978f92a445fbb5da4352c45b05d8f1babcc b/.git_disabled/objects/dc/c5c978f92a445fbb5da4352c45b05d8f1babcc
similarity index 100%
rename from mall/.git_disabled/objects/dc/c5c978f92a445fbb5da4352c45b05d8f1babcc
rename to .git_disabled/objects/dc/c5c978f92a445fbb5da4352c45b05d8f1babcc
diff --git a/mall/.git_disabled/objects/dd/5ce490a3fa10ce2219fcb3f65ba3a11419941c b/.git_disabled/objects/dd/5ce490a3fa10ce2219fcb3f65ba3a11419941c
similarity index 100%
rename from mall/.git_disabled/objects/dd/5ce490a3fa10ce2219fcb3f65ba3a11419941c
rename to .git_disabled/objects/dd/5ce490a3fa10ce2219fcb3f65ba3a11419941c
diff --git a/mall/.git_disabled/objects/dd/8ca3949d0b7dce2926083370e7d22a9364d57d b/.git_disabled/objects/dd/8ca3949d0b7dce2926083370e7d22a9364d57d
similarity index 100%
rename from mall/.git_disabled/objects/dd/8ca3949d0b7dce2926083370e7d22a9364d57d
rename to .git_disabled/objects/dd/8ca3949d0b7dce2926083370e7d22a9364d57d
diff --git a/mall/.git_disabled/objects/dd/e8cfaf22687175c5a92ab3497b6b3495133a12 b/.git_disabled/objects/dd/e8cfaf22687175c5a92ab3497b6b3495133a12
similarity index 100%
rename from mall/.git_disabled/objects/dd/e8cfaf22687175c5a92ab3497b6b3495133a12
rename to .git_disabled/objects/dd/e8cfaf22687175c5a92ab3497b6b3495133a12
diff --git a/mall/.git_disabled/objects/dd/f5d0f485f4c7bf07f1200d1b0d70b30e7cda43 b/.git_disabled/objects/dd/f5d0f485f4c7bf07f1200d1b0d70b30e7cda43
similarity index 100%
rename from mall/.git_disabled/objects/dd/f5d0f485f4c7bf07f1200d1b0d70b30e7cda43
rename to .git_disabled/objects/dd/f5d0f485f4c7bf07f1200d1b0d70b30e7cda43
diff --git a/mall/.git_disabled/objects/de/149c9b7b277dab734a599ed0826d582974b5fe b/.git_disabled/objects/de/149c9b7b277dab734a599ed0826d582974b5fe
similarity index 100%
rename from mall/.git_disabled/objects/de/149c9b7b277dab734a599ed0826d582974b5fe
rename to .git_disabled/objects/de/149c9b7b277dab734a599ed0826d582974b5fe
diff --git a/mall/.git_disabled/objects/de/185b28707d3b8388563ac454cb5dd8bac50b4b b/.git_disabled/objects/de/185b28707d3b8388563ac454cb5dd8bac50b4b
similarity index 100%
rename from mall/.git_disabled/objects/de/185b28707d3b8388563ac454cb5dd8bac50b4b
rename to .git_disabled/objects/de/185b28707d3b8388563ac454cb5dd8bac50b4b
diff --git a/mall/.git_disabled/objects/de/29cef92e4492e218c25e0610410fd83da1bd92 b/.git_disabled/objects/de/29cef92e4492e218c25e0610410fd83da1bd92
similarity index 100%
rename from mall/.git_disabled/objects/de/29cef92e4492e218c25e0610410fd83da1bd92
rename to .git_disabled/objects/de/29cef92e4492e218c25e0610410fd83da1bd92
diff --git a/mall/.git_disabled/objects/de/9460f931b697223558606dae3f466b211f0afd b/.git_disabled/objects/de/9460f931b697223558606dae3f466b211f0afd
similarity index 100%
rename from mall/.git_disabled/objects/de/9460f931b697223558606dae3f466b211f0afd
rename to .git_disabled/objects/de/9460f931b697223558606dae3f466b211f0afd
diff --git a/mall/.git_disabled/objects/de/9af775cac390862b3baf322f2c8be5c837c32c b/.git_disabled/objects/de/9af775cac390862b3baf322f2c8be5c837c32c
similarity index 100%
rename from mall/.git_disabled/objects/de/9af775cac390862b3baf322f2c8be5c837c32c
rename to .git_disabled/objects/de/9af775cac390862b3baf322f2c8be5c837c32c
diff --git a/mall/.git_disabled/objects/e0/0bebc0c00a00ee1b4fa0ad162568a593742b2d b/.git_disabled/objects/e0/0bebc0c00a00ee1b4fa0ad162568a593742b2d
similarity index 100%
rename from mall/.git_disabled/objects/e0/0bebc0c00a00ee1b4fa0ad162568a593742b2d
rename to .git_disabled/objects/e0/0bebc0c00a00ee1b4fa0ad162568a593742b2d
diff --git a/mall/.git_disabled/objects/e0/a9a11e0dbb9e157e4674a9a1c337dc850e2816 b/.git_disabled/objects/e0/a9a11e0dbb9e157e4674a9a1c337dc850e2816
similarity index 100%
rename from mall/.git_disabled/objects/e0/a9a11e0dbb9e157e4674a9a1c337dc850e2816
rename to .git_disabled/objects/e0/a9a11e0dbb9e157e4674a9a1c337dc850e2816
diff --git a/mall/.git_disabled/objects/e1/1134d730eac67ffd6837eb1ce7856d483d065c b/.git_disabled/objects/e1/1134d730eac67ffd6837eb1ce7856d483d065c
similarity index 100%
rename from mall/.git_disabled/objects/e1/1134d730eac67ffd6837eb1ce7856d483d065c
rename to .git_disabled/objects/e1/1134d730eac67ffd6837eb1ce7856d483d065c
diff --git a/mall/.git_disabled/objects/e1/5c068482520bd48e3e944f7bfdb6bcbbed8ecf b/.git_disabled/objects/e1/5c068482520bd48e3e944f7bfdb6bcbbed8ecf
similarity index 100%
rename from mall/.git_disabled/objects/e1/5c068482520bd48e3e944f7bfdb6bcbbed8ecf
rename to .git_disabled/objects/e1/5c068482520bd48e3e944f7bfdb6bcbbed8ecf
diff --git a/mall/.git_disabled/objects/e1/626a69fed8ddb59b87978740b7bb89e8a3f470 b/.git_disabled/objects/e1/626a69fed8ddb59b87978740b7bb89e8a3f470
similarity index 100%
rename from mall/.git_disabled/objects/e1/626a69fed8ddb59b87978740b7bb89e8a3f470
rename to .git_disabled/objects/e1/626a69fed8ddb59b87978740b7bb89e8a3f470
diff --git a/mall/.git_disabled/objects/e1/84579329e67997a3577c63d0e62c3a483bd29b b/.git_disabled/objects/e1/84579329e67997a3577c63d0e62c3a483bd29b
similarity index 100%
rename from mall/.git_disabled/objects/e1/84579329e67997a3577c63d0e62c3a483bd29b
rename to .git_disabled/objects/e1/84579329e67997a3577c63d0e62c3a483bd29b
diff --git a/mall/.git_disabled/objects/e1/fdc6ff753c19c95cfacf6b2bd5fa2bc8afbbc5 b/.git_disabled/objects/e1/fdc6ff753c19c95cfacf6b2bd5fa2bc8afbbc5
similarity index 100%
rename from mall/.git_disabled/objects/e1/fdc6ff753c19c95cfacf6b2bd5fa2bc8afbbc5
rename to .git_disabled/objects/e1/fdc6ff753c19c95cfacf6b2bd5fa2bc8afbbc5
diff --git a/mall/.git_disabled/objects/e3/bcbd9db09db5b2930ac695e6cd33fd48c822e0 b/.git_disabled/objects/e3/bcbd9db09db5b2930ac695e6cd33fd48c822e0
similarity index 100%
rename from mall/.git_disabled/objects/e3/bcbd9db09db5b2930ac695e6cd33fd48c822e0
rename to .git_disabled/objects/e3/bcbd9db09db5b2930ac695e6cd33fd48c822e0
diff --git a/mall/.git_disabled/objects/e4/95280b35195501c9f7a2fe21f0e36d70adfec2 b/.git_disabled/objects/e4/95280b35195501c9f7a2fe21f0e36d70adfec2
similarity index 100%
rename from mall/.git_disabled/objects/e4/95280b35195501c9f7a2fe21f0e36d70adfec2
rename to .git_disabled/objects/e4/95280b35195501c9f7a2fe21f0e36d70adfec2
diff --git a/mall/.git_disabled/objects/e4/977f6c90b3c7f26126cb7c4664827cdf30ca46 b/.git_disabled/objects/e4/977f6c90b3c7f26126cb7c4664827cdf30ca46
similarity index 100%
rename from mall/.git_disabled/objects/e4/977f6c90b3c7f26126cb7c4664827cdf30ca46
rename to .git_disabled/objects/e4/977f6c90b3c7f26126cb7c4664827cdf30ca46
diff --git a/mall/.git_disabled/objects/e4/9df78a071574459a1db00aebafd69b41350977 b/.git_disabled/objects/e4/9df78a071574459a1db00aebafd69b41350977
similarity index 100%
rename from mall/.git_disabled/objects/e4/9df78a071574459a1db00aebafd69b41350977
rename to .git_disabled/objects/e4/9df78a071574459a1db00aebafd69b41350977
diff --git a/mall/.git_disabled/objects/e4/c08188ae246e57bee8f908f22023d00b00e355 b/.git_disabled/objects/e4/c08188ae246e57bee8f908f22023d00b00e355
similarity index 100%
rename from mall/.git_disabled/objects/e4/c08188ae246e57bee8f908f22023d00b00e355
rename to .git_disabled/objects/e4/c08188ae246e57bee8f908f22023d00b00e355
diff --git a/mall/.git_disabled/objects/e5/f32cdea2cbd114ab51d0969246d482becd1c47 b/.git_disabled/objects/e5/f32cdea2cbd114ab51d0969246d482becd1c47
similarity index 100%
rename from mall/.git_disabled/objects/e5/f32cdea2cbd114ab51d0969246d482becd1c47
rename to .git_disabled/objects/e5/f32cdea2cbd114ab51d0969246d482becd1c47
diff --git a/mall/.git_disabled/objects/e6/661ba698e5f4b88e0874c72d70242cbb7369ca b/.git_disabled/objects/e6/661ba698e5f4b88e0874c72d70242cbb7369ca
similarity index 100%
rename from mall/.git_disabled/objects/e6/661ba698e5f4b88e0874c72d70242cbb7369ca
rename to .git_disabled/objects/e6/661ba698e5f4b88e0874c72d70242cbb7369ca
diff --git a/mall/.git_disabled/objects/e6/6bc7381b3d8250a08853c5fceff6b5f7cb6d63 b/.git_disabled/objects/e6/6bc7381b3d8250a08853c5fceff6b5f7cb6d63
similarity index 100%
rename from mall/.git_disabled/objects/e6/6bc7381b3d8250a08853c5fceff6b5f7cb6d63
rename to .git_disabled/objects/e6/6bc7381b3d8250a08853c5fceff6b5f7cb6d63
diff --git a/mall/.git_disabled/objects/e6/f688458b9562a0077c0547c6223481afdbfa45 b/.git_disabled/objects/e6/f688458b9562a0077c0547c6223481afdbfa45
similarity index 100%
rename from mall/.git_disabled/objects/e6/f688458b9562a0077c0547c6223481afdbfa45
rename to .git_disabled/objects/e6/f688458b9562a0077c0547c6223481afdbfa45
diff --git a/mall/.git_disabled/objects/e7/105fc5009f6d014c581825f27c4935a6f724ac b/.git_disabled/objects/e7/105fc5009f6d014c581825f27c4935a6f724ac
similarity index 100%
rename from mall/.git_disabled/objects/e7/105fc5009f6d014c581825f27c4935a6f724ac
rename to .git_disabled/objects/e7/105fc5009f6d014c581825f27c4935a6f724ac
diff --git a/mall/.git_disabled/objects/e7/bc2be9e7192fda6897c7db8a142a63a2dd9137 b/.git_disabled/objects/e7/bc2be9e7192fda6897c7db8a142a63a2dd9137
similarity index 100%
rename from mall/.git_disabled/objects/e7/bc2be9e7192fda6897c7db8a142a63a2dd9137
rename to .git_disabled/objects/e7/bc2be9e7192fda6897c7db8a142a63a2dd9137
diff --git a/mall/.git_disabled/objects/e8/9a0a2d18fbf3878353467e411eb27149f5bbb4 b/.git_disabled/objects/e8/9a0a2d18fbf3878353467e411eb27149f5bbb4
similarity index 100%
rename from mall/.git_disabled/objects/e8/9a0a2d18fbf3878353467e411eb27149f5bbb4
rename to .git_disabled/objects/e8/9a0a2d18fbf3878353467e411eb27149f5bbb4
diff --git a/mall/.git_disabled/objects/e9/3fbc0b9a3316f16c0e806289f2554ca62af655 b/.git_disabled/objects/e9/3fbc0b9a3316f16c0e806289f2554ca62af655
similarity index 100%
rename from mall/.git_disabled/objects/e9/3fbc0b9a3316f16c0e806289f2554ca62af655
rename to .git_disabled/objects/e9/3fbc0b9a3316f16c0e806289f2554ca62af655
diff --git a/mall/.git_disabled/objects/e9/8f8a090ee8d8500568646f514f4cd66b340a73 b/.git_disabled/objects/e9/8f8a090ee8d8500568646f514f4cd66b340a73
similarity index 100%
rename from mall/.git_disabled/objects/e9/8f8a090ee8d8500568646f514f4cd66b340a73
rename to .git_disabled/objects/e9/8f8a090ee8d8500568646f514f4cd66b340a73
diff --git a/mall/.git_disabled/objects/eb/929904c99d4bde19fb0f26256e8577a6b46b4d b/.git_disabled/objects/eb/929904c99d4bde19fb0f26256e8577a6b46b4d
similarity index 100%
rename from mall/.git_disabled/objects/eb/929904c99d4bde19fb0f26256e8577a6b46b4d
rename to .git_disabled/objects/eb/929904c99d4bde19fb0f26256e8577a6b46b4d
diff --git a/mall/.git_disabled/objects/ec/734cdf8057fccf05dd215bc799d7cf06cdcefd b/.git_disabled/objects/ec/734cdf8057fccf05dd215bc799d7cf06cdcefd
similarity index 100%
rename from mall/.git_disabled/objects/ec/734cdf8057fccf05dd215bc799d7cf06cdcefd
rename to .git_disabled/objects/ec/734cdf8057fccf05dd215bc799d7cf06cdcefd
diff --git a/mall/.git_disabled/objects/ec/87872edd85e94af50a60a3741cda7c65d92947 b/.git_disabled/objects/ec/87872edd85e94af50a60a3741cda7c65d92947
similarity index 100%
rename from mall/.git_disabled/objects/ec/87872edd85e94af50a60a3741cda7c65d92947
rename to .git_disabled/objects/ec/87872edd85e94af50a60a3741cda7c65d92947
diff --git a/mall/.git_disabled/objects/ec/bf77c45c3c930c946779891d7331f1add5bea8 b/.git_disabled/objects/ec/bf77c45c3c930c946779891d7331f1add5bea8
similarity index 100%
rename from mall/.git_disabled/objects/ec/bf77c45c3c930c946779891d7331f1add5bea8
rename to .git_disabled/objects/ec/bf77c45c3c930c946779891d7331f1add5bea8
diff --git a/mall/.git_disabled/objects/ed/67b4e9474db758abaed2bff4379e8f6149e23a b/.git_disabled/objects/ed/67b4e9474db758abaed2bff4379e8f6149e23a
similarity index 100%
rename from mall/.git_disabled/objects/ed/67b4e9474db758abaed2bff4379e8f6149e23a
rename to .git_disabled/objects/ed/67b4e9474db758abaed2bff4379e8f6149e23a
diff --git a/mall/.git_disabled/objects/ed/7f4ffe6971776c862dcfb8b6f7547c16cf9373 b/.git_disabled/objects/ed/7f4ffe6971776c862dcfb8b6f7547c16cf9373
similarity index 100%
rename from mall/.git_disabled/objects/ed/7f4ffe6971776c862dcfb8b6f7547c16cf9373
rename to .git_disabled/objects/ed/7f4ffe6971776c862dcfb8b6f7547c16cf9373
diff --git a/mall/.git_disabled/objects/ed/fa48920de4b47ec239751f7df565acc2f33328 b/.git_disabled/objects/ed/fa48920de4b47ec239751f7df565acc2f33328
similarity index 100%
rename from mall/.git_disabled/objects/ed/fa48920de4b47ec239751f7df565acc2f33328
rename to .git_disabled/objects/ed/fa48920de4b47ec239751f7df565acc2f33328
diff --git a/mall/.git_disabled/objects/ee/14d064555db9735223520adcbf25e90d9acac4 b/.git_disabled/objects/ee/14d064555db9735223520adcbf25e90d9acac4
similarity index 100%
rename from mall/.git_disabled/objects/ee/14d064555db9735223520adcbf25e90d9acac4
rename to .git_disabled/objects/ee/14d064555db9735223520adcbf25e90d9acac4
diff --git a/mall/.git_disabled/objects/ee/21854feb8a0dbca4c118d3e810701cf4ae260b b/.git_disabled/objects/ee/21854feb8a0dbca4c118d3e810701cf4ae260b
similarity index 100%
rename from mall/.git_disabled/objects/ee/21854feb8a0dbca4c118d3e810701cf4ae260b
rename to .git_disabled/objects/ee/21854feb8a0dbca4c118d3e810701cf4ae260b
diff --git a/mall/.git_disabled/objects/ee/38af71545782e8c9bf7a3f8bbb3b8a0685d571 b/.git_disabled/objects/ee/38af71545782e8c9bf7a3f8bbb3b8a0685d571
similarity index 100%
rename from mall/.git_disabled/objects/ee/38af71545782e8c9bf7a3f8bbb3b8a0685d571
rename to .git_disabled/objects/ee/38af71545782e8c9bf7a3f8bbb3b8a0685d571
diff --git a/mall/.git_disabled/objects/ee/88c770b67440067a5a7cab9a923571eb81b26a b/.git_disabled/objects/ee/88c770b67440067a5a7cab9a923571eb81b26a
similarity index 100%
rename from mall/.git_disabled/objects/ee/88c770b67440067a5a7cab9a923571eb81b26a
rename to .git_disabled/objects/ee/88c770b67440067a5a7cab9a923571eb81b26a
diff --git a/mall/.git_disabled/objects/ee/ce696eae3274ae4e96ac4f05f38919f50634c3 b/.git_disabled/objects/ee/ce696eae3274ae4e96ac4f05f38919f50634c3
similarity index 100%
rename from mall/.git_disabled/objects/ee/ce696eae3274ae4e96ac4f05f38919f50634c3
rename to .git_disabled/objects/ee/ce696eae3274ae4e96ac4f05f38919f50634c3
diff --git a/mall/.git_disabled/objects/ef/3baf523b5d00ce1489ac9ea2928cd708add449 b/.git_disabled/objects/ef/3baf523b5d00ce1489ac9ea2928cd708add449
similarity index 100%
rename from mall/.git_disabled/objects/ef/3baf523b5d00ce1489ac9ea2928cd708add449
rename to .git_disabled/objects/ef/3baf523b5d00ce1489ac9ea2928cd708add449
diff --git a/mall/.git_disabled/objects/ef/59d4de7d8cc1470a5436a9952370df8c5eb98c b/.git_disabled/objects/ef/59d4de7d8cc1470a5436a9952370df8c5eb98c
similarity index 100%
rename from mall/.git_disabled/objects/ef/59d4de7d8cc1470a5436a9952370df8c5eb98c
rename to .git_disabled/objects/ef/59d4de7d8cc1470a5436a9952370df8c5eb98c
diff --git a/mall/.git_disabled/objects/ef/81282cc0d2c587277b3659acee21c66cb163f5 b/.git_disabled/objects/ef/81282cc0d2c587277b3659acee21c66cb163f5
similarity index 100%
rename from mall/.git_disabled/objects/ef/81282cc0d2c587277b3659acee21c66cb163f5
rename to .git_disabled/objects/ef/81282cc0d2c587277b3659acee21c66cb163f5
diff --git a/mall/.git_disabled/objects/f0/5c892de9bfa5e1fb95df5e2216c460ca17904f b/.git_disabled/objects/f0/5c892de9bfa5e1fb95df5e2216c460ca17904f
similarity index 100%
rename from mall/.git_disabled/objects/f0/5c892de9bfa5e1fb95df5e2216c460ca17904f
rename to .git_disabled/objects/f0/5c892de9bfa5e1fb95df5e2216c460ca17904f
diff --git a/mall/.git_disabled/objects/f0/a56a63e3e9c48a4992f7751c2d88a5246613b7 b/.git_disabled/objects/f0/a56a63e3e9c48a4992f7751c2d88a5246613b7
similarity index 100%
rename from mall/.git_disabled/objects/f0/a56a63e3e9c48a4992f7751c2d88a5246613b7
rename to .git_disabled/objects/f0/a56a63e3e9c48a4992f7751c2d88a5246613b7
diff --git a/mall/.git_disabled/objects/f0/cffee0efca301c4af7b4bc6e155aaa862e04a9 b/.git_disabled/objects/f0/cffee0efca301c4af7b4bc6e155aaa862e04a9
similarity index 100%
rename from mall/.git_disabled/objects/f0/cffee0efca301c4af7b4bc6e155aaa862e04a9
rename to .git_disabled/objects/f0/cffee0efca301c4af7b4bc6e155aaa862e04a9
diff --git a/mall/.git_disabled/objects/f0/da805e6b74e14e00d511cbc041a86bcf14c6aa b/.git_disabled/objects/f0/da805e6b74e14e00d511cbc041a86bcf14c6aa
similarity index 100%
rename from mall/.git_disabled/objects/f0/da805e6b74e14e00d511cbc041a86bcf14c6aa
rename to .git_disabled/objects/f0/da805e6b74e14e00d511cbc041a86bcf14c6aa
diff --git a/mall/.git_disabled/objects/f0/e0e08d12ed54f0d19b9ba71bf2ab74790167f3 b/.git_disabled/objects/f0/e0e08d12ed54f0d19b9ba71bf2ab74790167f3
similarity index 100%
rename from mall/.git_disabled/objects/f0/e0e08d12ed54f0d19b9ba71bf2ab74790167f3
rename to .git_disabled/objects/f0/e0e08d12ed54f0d19b9ba71bf2ab74790167f3
diff --git a/mall/.git_disabled/objects/f1/2ed85ad8faa0193be177dba82abd1d3ae7f4ba b/.git_disabled/objects/f1/2ed85ad8faa0193be177dba82abd1d3ae7f4ba
similarity index 100%
rename from mall/.git_disabled/objects/f1/2ed85ad8faa0193be177dba82abd1d3ae7f4ba
rename to .git_disabled/objects/f1/2ed85ad8faa0193be177dba82abd1d3ae7f4ba
diff --git a/mall/.git_disabled/objects/f1/2f19ebbaecb28f4a5d4475d9aaf935607cccab b/.git_disabled/objects/f1/2f19ebbaecb28f4a5d4475d9aaf935607cccab
similarity index 100%
rename from mall/.git_disabled/objects/f1/2f19ebbaecb28f4a5d4475d9aaf935607cccab
rename to .git_disabled/objects/f1/2f19ebbaecb28f4a5d4475d9aaf935607cccab
diff --git a/mall/.git_disabled/objects/f1/a6541cb00cd209e28a9345d8eeb9474a4155bb b/.git_disabled/objects/f1/a6541cb00cd209e28a9345d8eeb9474a4155bb
similarity index 100%
rename from mall/.git_disabled/objects/f1/a6541cb00cd209e28a9345d8eeb9474a4155bb
rename to .git_disabled/objects/f1/a6541cb00cd209e28a9345d8eeb9474a4155bb
diff --git a/mall/.git_disabled/objects/f2/1a4ec5e47e9f6e64fb5949d8616231df448df3 b/.git_disabled/objects/f2/1a4ec5e47e9f6e64fb5949d8616231df448df3
similarity index 100%
rename from mall/.git_disabled/objects/f2/1a4ec5e47e9f6e64fb5949d8616231df448df3
rename to .git_disabled/objects/f2/1a4ec5e47e9f6e64fb5949d8616231df448df3
diff --git a/mall/.git_disabled/objects/f2/37adb21a7477762f0122297b2393b719c8d5f2 b/.git_disabled/objects/f2/37adb21a7477762f0122297b2393b719c8d5f2
similarity index 100%
rename from mall/.git_disabled/objects/f2/37adb21a7477762f0122297b2393b719c8d5f2
rename to .git_disabled/objects/f2/37adb21a7477762f0122297b2393b719c8d5f2
diff --git a/mall/.git_disabled/objects/f2/837e45e68fc6a989a0bb07b3c392373bb435ec b/.git_disabled/objects/f2/837e45e68fc6a989a0bb07b3c392373bb435ec
similarity index 100%
rename from mall/.git_disabled/objects/f2/837e45e68fc6a989a0bb07b3c392373bb435ec
rename to .git_disabled/objects/f2/837e45e68fc6a989a0bb07b3c392373bb435ec
diff --git a/mall/.git_disabled/objects/f2/e078b4323cddfbf5258c5824799aaff2198c03 b/.git_disabled/objects/f2/e078b4323cddfbf5258c5824799aaff2198c03
similarity index 100%
rename from mall/.git_disabled/objects/f2/e078b4323cddfbf5258c5824799aaff2198c03
rename to .git_disabled/objects/f2/e078b4323cddfbf5258c5824799aaff2198c03
diff --git a/mall/.git_disabled/objects/f2/f208f258a1a6e6247ec138c1a16eb63138d4db b/.git_disabled/objects/f2/f208f258a1a6e6247ec138c1a16eb63138d4db
similarity index 100%
rename from mall/.git_disabled/objects/f2/f208f258a1a6e6247ec138c1a16eb63138d4db
rename to .git_disabled/objects/f2/f208f258a1a6e6247ec138c1a16eb63138d4db
diff --git a/mall/.git_disabled/objects/f3/18e05a703f7a17c43cfaf6bc9fd6fed3b9132d b/.git_disabled/objects/f3/18e05a703f7a17c43cfaf6bc9fd6fed3b9132d
similarity index 100%
rename from mall/.git_disabled/objects/f3/18e05a703f7a17c43cfaf6bc9fd6fed3b9132d
rename to .git_disabled/objects/f3/18e05a703f7a17c43cfaf6bc9fd6fed3b9132d
diff --git a/mall/.git_disabled/objects/f3/3fd1022d33f551685c2e1bd0b8b250c1670fee b/.git_disabled/objects/f3/3fd1022d33f551685c2e1bd0b8b250c1670fee
similarity index 100%
rename from mall/.git_disabled/objects/f3/3fd1022d33f551685c2e1bd0b8b250c1670fee
rename to .git_disabled/objects/f3/3fd1022d33f551685c2e1bd0b8b250c1670fee
diff --git a/mall/.git_disabled/objects/f4/88d5c2c6b0ea1bcffb2bdb781d11a90da3f30f b/.git_disabled/objects/f4/88d5c2c6b0ea1bcffb2bdb781d11a90da3f30f
similarity index 100%
rename from mall/.git_disabled/objects/f4/88d5c2c6b0ea1bcffb2bdb781d11a90da3f30f
rename to .git_disabled/objects/f4/88d5c2c6b0ea1bcffb2bdb781d11a90da3f30f
diff --git a/mall/.git_disabled/objects/f4/985a3355e3682c4c1d5353a73299f746cf8cd3 b/.git_disabled/objects/f4/985a3355e3682c4c1d5353a73299f746cf8cd3
similarity index 100%
rename from mall/.git_disabled/objects/f4/985a3355e3682c4c1d5353a73299f746cf8cd3
rename to .git_disabled/objects/f4/985a3355e3682c4c1d5353a73299f746cf8cd3
diff --git a/mall/.git_disabled/objects/f4/ef196827ca598a0bf508e84b5e79517fbaf423 b/.git_disabled/objects/f4/ef196827ca598a0bf508e84b5e79517fbaf423
similarity index 100%
rename from mall/.git_disabled/objects/f4/ef196827ca598a0bf508e84b5e79517fbaf423
rename to .git_disabled/objects/f4/ef196827ca598a0bf508e84b5e79517fbaf423
diff --git a/mall/.git_disabled/objects/f5/1846ce0cffc88f92eb8129bc3eeb74c8548361 b/.git_disabled/objects/f5/1846ce0cffc88f92eb8129bc3eeb74c8548361
similarity index 100%
rename from mall/.git_disabled/objects/f5/1846ce0cffc88f92eb8129bc3eeb74c8548361
rename to .git_disabled/objects/f5/1846ce0cffc88f92eb8129bc3eeb74c8548361
diff --git a/mall/.git_disabled/objects/f5/1d5d490c34af80bec89c9c316f8b93dabe7075 b/.git_disabled/objects/f5/1d5d490c34af80bec89c9c316f8b93dabe7075
similarity index 100%
rename from mall/.git_disabled/objects/f5/1d5d490c34af80bec89c9c316f8b93dabe7075
rename to .git_disabled/objects/f5/1d5d490c34af80bec89c9c316f8b93dabe7075
diff --git a/mall/.git_disabled/objects/f6/8dfd6f9c60cf2a70229b99aa5050ba64f89cbb b/.git_disabled/objects/f6/8dfd6f9c60cf2a70229b99aa5050ba64f89cbb
similarity index 100%
rename from mall/.git_disabled/objects/f6/8dfd6f9c60cf2a70229b99aa5050ba64f89cbb
rename to .git_disabled/objects/f6/8dfd6f9c60cf2a70229b99aa5050ba64f89cbb
diff --git a/mall/.git_disabled/objects/f7/296fce3da50b37ec1182bc1d50bf5ec1cea484 b/.git_disabled/objects/f7/296fce3da50b37ec1182bc1d50bf5ec1cea484
similarity index 100%
rename from mall/.git_disabled/objects/f7/296fce3da50b37ec1182bc1d50bf5ec1cea484
rename to .git_disabled/objects/f7/296fce3da50b37ec1182bc1d50bf5ec1cea484
diff --git a/mall/.git_disabled/objects/f7/5da367769fe7f59ee642212a284d050b892b54 b/.git_disabled/objects/f7/5da367769fe7f59ee642212a284d050b892b54
similarity index 100%
rename from mall/.git_disabled/objects/f7/5da367769fe7f59ee642212a284d050b892b54
rename to .git_disabled/objects/f7/5da367769fe7f59ee642212a284d050b892b54
diff --git a/mall/.git_disabled/objects/f7/80dd9d10438c0ec6c101111ed792573548e7b3 b/.git_disabled/objects/f7/80dd9d10438c0ec6c101111ed792573548e7b3
similarity index 100%
rename from mall/.git_disabled/objects/f7/80dd9d10438c0ec6c101111ed792573548e7b3
rename to .git_disabled/objects/f7/80dd9d10438c0ec6c101111ed792573548e7b3
diff --git a/mall/.git_disabled/objects/f8/cd545d362800ca6b3b10f3a7d035c11b1acb59 b/.git_disabled/objects/f8/cd545d362800ca6b3b10f3a7d035c11b1acb59
similarity index 100%
rename from mall/.git_disabled/objects/f8/cd545d362800ca6b3b10f3a7d035c11b1acb59
rename to .git_disabled/objects/f8/cd545d362800ca6b3b10f3a7d035c11b1acb59
diff --git a/mall/.git_disabled/objects/f9/e78b865489bda4fcbab4740758d177834d74f2 b/.git_disabled/objects/f9/e78b865489bda4fcbab4740758d177834d74f2
similarity index 100%
rename from mall/.git_disabled/objects/f9/e78b865489bda4fcbab4740758d177834d74f2
rename to .git_disabled/objects/f9/e78b865489bda4fcbab4740758d177834d74f2
diff --git a/mall/.git_disabled/objects/fa/0278fcea01adf22d33a38745bf40ae6c87f31f b/.git_disabled/objects/fa/0278fcea01adf22d33a38745bf40ae6c87f31f
similarity index 100%
rename from mall/.git_disabled/objects/fa/0278fcea01adf22d33a38745bf40ae6c87f31f
rename to .git_disabled/objects/fa/0278fcea01adf22d33a38745bf40ae6c87f31f
diff --git a/mall/.git_disabled/objects/fa/4bc8bd51a03dea8e08c230ad3b2a8094e6f02a b/.git_disabled/objects/fa/4bc8bd51a03dea8e08c230ad3b2a8094e6f02a
similarity index 100%
rename from mall/.git_disabled/objects/fa/4bc8bd51a03dea8e08c230ad3b2a8094e6f02a
rename to .git_disabled/objects/fa/4bc8bd51a03dea8e08c230ad3b2a8094e6f02a
diff --git a/mall/.git_disabled/objects/fa/74c16f18af88c53b5e7ab84e71e58296b39a93 b/.git_disabled/objects/fa/74c16f18af88c53b5e7ab84e71e58296b39a93
similarity index 100%
rename from mall/.git_disabled/objects/fa/74c16f18af88c53b5e7ab84e71e58296b39a93
rename to .git_disabled/objects/fa/74c16f18af88c53b5e7ab84e71e58296b39a93
diff --git a/mall/.git_disabled/objects/fa/a310bf2ade2d48a7109b3b775dd7679a122b7e b/.git_disabled/objects/fa/a310bf2ade2d48a7109b3b775dd7679a122b7e
similarity index 100%
rename from mall/.git_disabled/objects/fa/a310bf2ade2d48a7109b3b775dd7679a122b7e
rename to .git_disabled/objects/fa/a310bf2ade2d48a7109b3b775dd7679a122b7e
diff --git a/mall/.git_disabled/objects/fb/5adc6f9e42463ce519816f8d6c932130ce43bb b/.git_disabled/objects/fb/5adc6f9e42463ce519816f8d6c932130ce43bb
similarity index 100%
rename from mall/.git_disabled/objects/fb/5adc6f9e42463ce519816f8d6c932130ce43bb
rename to .git_disabled/objects/fb/5adc6f9e42463ce519816f8d6c932130ce43bb
diff --git a/mall/.git_disabled/objects/fc/8a8495f12c9756263c0ee89805f370c7a52f61 b/.git_disabled/objects/fc/8a8495f12c9756263c0ee89805f370c7a52f61
similarity index 100%
rename from mall/.git_disabled/objects/fc/8a8495f12c9756263c0ee89805f370c7a52f61
rename to .git_disabled/objects/fc/8a8495f12c9756263c0ee89805f370c7a52f61
diff --git a/mall/.git_disabled/objects/fc/8b822962627c46022b85b53c5e0b5624b69907 b/.git_disabled/objects/fc/8b822962627c46022b85b53c5e0b5624b69907
similarity index 100%
rename from mall/.git_disabled/objects/fc/8b822962627c46022b85b53c5e0b5624b69907
rename to .git_disabled/objects/fc/8b822962627c46022b85b53c5e0b5624b69907
diff --git a/mall/.git_disabled/objects/fc/f50ed004fe10291906cd1accbf85cc945c333a b/.git_disabled/objects/fc/f50ed004fe10291906cd1accbf85cc945c333a
similarity index 100%
rename from mall/.git_disabled/objects/fc/f50ed004fe10291906cd1accbf85cc945c333a
rename to .git_disabled/objects/fc/f50ed004fe10291906cd1accbf85cc945c333a
diff --git a/mall/.git_disabled/objects/fd/bee0fa324a30960a9c6c9457358feb91e64478 b/.git_disabled/objects/fd/bee0fa324a30960a9c6c9457358feb91e64478
similarity index 100%
rename from mall/.git_disabled/objects/fd/bee0fa324a30960a9c6c9457358feb91e64478
rename to .git_disabled/objects/fd/bee0fa324a30960a9c6c9457358feb91e64478
diff --git a/mall/.git_disabled/objects/fd/d0db6df282cd7c895573134e6dd2f2dd0158d6 b/.git_disabled/objects/fd/d0db6df282cd7c895573134e6dd2f2dd0158d6
similarity index 100%
rename from mall/.git_disabled/objects/fd/d0db6df282cd7c895573134e6dd2f2dd0158d6
rename to .git_disabled/objects/fd/d0db6df282cd7c895573134e6dd2f2dd0158d6
diff --git a/mall/.git_disabled/objects/fd/eed91ce0012fabc6c0d8ba225a9fb308cb3d46 b/.git_disabled/objects/fd/eed91ce0012fabc6c0d8ba225a9fb308cb3d46
similarity index 100%
rename from mall/.git_disabled/objects/fd/eed91ce0012fabc6c0d8ba225a9fb308cb3d46
rename to .git_disabled/objects/fd/eed91ce0012fabc6c0d8ba225a9fb308cb3d46
diff --git a/mall/.git_disabled/objects/fe/d5ab008e6c98379ca65cef433deacf73737ad1 b/.git_disabled/objects/fe/d5ab008e6c98379ca65cef433deacf73737ad1
similarity index 100%
rename from mall/.git_disabled/objects/fe/d5ab008e6c98379ca65cef433deacf73737ad1
rename to .git_disabled/objects/fe/d5ab008e6c98379ca65cef433deacf73737ad1
diff --git a/mall/.git_disabled/objects/fe/d6354902617f8485f6d521b4006e6ea14d76e7 b/.git_disabled/objects/fe/d6354902617f8485f6d521b4006e6ea14d76e7
similarity index 100%
rename from mall/.git_disabled/objects/fe/d6354902617f8485f6d521b4006e6ea14d76e7
rename to .git_disabled/objects/fe/d6354902617f8485f6d521b4006e6ea14d76e7
diff --git a/mall/.git_disabled/objects/fe/e0b5434a18776718410da56b7ecddf07ec23d4 b/.git_disabled/objects/fe/e0b5434a18776718410da56b7ecddf07ec23d4
similarity index 100%
rename from mall/.git_disabled/objects/fe/e0b5434a18776718410da56b7ecddf07ec23d4
rename to .git_disabled/objects/fe/e0b5434a18776718410da56b7ecddf07ec23d4
diff --git a/mall/.git_disabled/objects/fe/eea53d90bba6247f2620912acf32a5908945cb b/.git_disabled/objects/fe/eea53d90bba6247f2620912acf32a5908945cb
similarity index 100%
rename from mall/.git_disabled/objects/fe/eea53d90bba6247f2620912acf32a5908945cb
rename to .git_disabled/objects/fe/eea53d90bba6247f2620912acf32a5908945cb
diff --git a/mall/.git_disabled/objects/ff/a1f5203dd3249a2a3be1eaa30e2918923e18ef b/.git_disabled/objects/ff/a1f5203dd3249a2a3be1eaa30e2918923e18ef
similarity index 100%
rename from mall/.git_disabled/objects/ff/a1f5203dd3249a2a3be1eaa30e2918923e18ef
rename to .git_disabled/objects/ff/a1f5203dd3249a2a3be1eaa30e2918923e18ef
diff --git a/mall/.git_disabled/objects/ff/f1ac0f73b3a9ebeb0c256a66437286c12716f6 b/.git_disabled/objects/ff/f1ac0f73b3a9ebeb0c256a66437286c12716f6
similarity index 100%
rename from mall/.git_disabled/objects/ff/f1ac0f73b3a9ebeb0c256a66437286c12716f6
rename to .git_disabled/objects/ff/f1ac0f73b3a9ebeb0c256a66437286c12716f6
diff --git a/mall/.git_disabled/objects/ff/f4371c33c25dc5bf801486d0990ca232dc174d b/.git_disabled/objects/ff/f4371c33c25dc5bf801486d0990ca232dc174d
similarity index 100%
rename from mall/.git_disabled/objects/ff/f4371c33c25dc5bf801486d0990ca232dc174d
rename to .git_disabled/objects/ff/f4371c33c25dc5bf801486d0990ca232dc174d
diff --git a/mall/.git_disabled/objects/pack/pack-2d64d5291e8936e45e8afe09b48196d375cda344.idx b/.git_disabled/objects/pack/pack-2d64d5291e8936e45e8afe09b48196d375cda344.idx
similarity index 100%
rename from mall/.git_disabled/objects/pack/pack-2d64d5291e8936e45e8afe09b48196d375cda344.idx
rename to .git_disabled/objects/pack/pack-2d64d5291e8936e45e8afe09b48196d375cda344.idx
diff --git a/mall/.git_disabled/objects/pack/pack-2d64d5291e8936e45e8afe09b48196d375cda344.pack b/.git_disabled/objects/pack/pack-2d64d5291e8936e45e8afe09b48196d375cda344.pack
similarity index 100%
rename from mall/.git_disabled/objects/pack/pack-2d64d5291e8936e45e8afe09b48196d375cda344.pack
rename to .git_disabled/objects/pack/pack-2d64d5291e8936e45e8afe09b48196d375cda344.pack
diff --git a/mall/.git_disabled/objects/pack/pack-2d64d5291e8936e45e8afe09b48196d375cda344.rev b/.git_disabled/objects/pack/pack-2d64d5291e8936e45e8afe09b48196d375cda344.rev
similarity index 100%
rename from mall/.git_disabled/objects/pack/pack-2d64d5291e8936e45e8afe09b48196d375cda344.rev
rename to .git_disabled/objects/pack/pack-2d64d5291e8936e45e8afe09b48196d375cda344.rev
diff --git a/mall/.git_disabled/objects/pack/pack-56653ebedd073ec8a15e1120e171acbb71747199.idx b/.git_disabled/objects/pack/pack-56653ebedd073ec8a15e1120e171acbb71747199.idx
similarity index 100%
rename from mall/.git_disabled/objects/pack/pack-56653ebedd073ec8a15e1120e171acbb71747199.idx
rename to .git_disabled/objects/pack/pack-56653ebedd073ec8a15e1120e171acbb71747199.idx
diff --git a/mall/.git_disabled/objects/pack/pack-56653ebedd073ec8a15e1120e171acbb71747199.pack b/.git_disabled/objects/pack/pack-56653ebedd073ec8a15e1120e171acbb71747199.pack
similarity index 100%
rename from mall/.git_disabled/objects/pack/pack-56653ebedd073ec8a15e1120e171acbb71747199.pack
rename to .git_disabled/objects/pack/pack-56653ebedd073ec8a15e1120e171acbb71747199.pack
diff --git a/mall/.git_disabled/objects/pack/pack-56653ebedd073ec8a15e1120e171acbb71747199.rev b/.git_disabled/objects/pack/pack-56653ebedd073ec8a15e1120e171acbb71747199.rev
similarity index 100%
rename from mall/.git_disabled/objects/pack/pack-56653ebedd073ec8a15e1120e171acbb71747199.rev
rename to .git_disabled/objects/pack/pack-56653ebedd073ec8a15e1120e171acbb71747199.rev
diff --git a/mall/.git_disabled/objects/pack/pack-835825c0d6dc5992012cc7de38d279d83828267a.idx b/.git_disabled/objects/pack/pack-835825c0d6dc5992012cc7de38d279d83828267a.idx
similarity index 100%
rename from mall/.git_disabled/objects/pack/pack-835825c0d6dc5992012cc7de38d279d83828267a.idx
rename to .git_disabled/objects/pack/pack-835825c0d6dc5992012cc7de38d279d83828267a.idx
diff --git a/mall/.git_disabled/objects/pack/pack-835825c0d6dc5992012cc7de38d279d83828267a.pack b/.git_disabled/objects/pack/pack-835825c0d6dc5992012cc7de38d279d83828267a.pack
similarity index 100%
rename from mall/.git_disabled/objects/pack/pack-835825c0d6dc5992012cc7de38d279d83828267a.pack
rename to .git_disabled/objects/pack/pack-835825c0d6dc5992012cc7de38d279d83828267a.pack
diff --git a/mall/.git_disabled/objects/pack/pack-835825c0d6dc5992012cc7de38d279d83828267a.rev b/.git_disabled/objects/pack/pack-835825c0d6dc5992012cc7de38d279d83828267a.rev
similarity index 100%
rename from mall/.git_disabled/objects/pack/pack-835825c0d6dc5992012cc7de38d279d83828267a.rev
rename to .git_disabled/objects/pack/pack-835825c0d6dc5992012cc7de38d279d83828267a.rev
diff --git a/mall/.git_disabled/objects/pack/pack-8f6ff917ed314b5db03ad3443e492f49040bb9c6.idx b/.git_disabled/objects/pack/pack-8f6ff917ed314b5db03ad3443e492f49040bb9c6.idx
similarity index 100%
rename from mall/.git_disabled/objects/pack/pack-8f6ff917ed314b5db03ad3443e492f49040bb9c6.idx
rename to .git_disabled/objects/pack/pack-8f6ff917ed314b5db03ad3443e492f49040bb9c6.idx
diff --git a/mall/.git_disabled/objects/pack/pack-8f6ff917ed314b5db03ad3443e492f49040bb9c6.pack b/.git_disabled/objects/pack/pack-8f6ff917ed314b5db03ad3443e492f49040bb9c6.pack
similarity index 100%
rename from mall/.git_disabled/objects/pack/pack-8f6ff917ed314b5db03ad3443e492f49040bb9c6.pack
rename to .git_disabled/objects/pack/pack-8f6ff917ed314b5db03ad3443e492f49040bb9c6.pack
diff --git a/mall/.git_disabled/objects/pack/pack-8f6ff917ed314b5db03ad3443e492f49040bb9c6.rev b/.git_disabled/objects/pack/pack-8f6ff917ed314b5db03ad3443e492f49040bb9c6.rev
similarity index 100%
rename from mall/.git_disabled/objects/pack/pack-8f6ff917ed314b5db03ad3443e492f49040bb9c6.rev
rename to .git_disabled/objects/pack/pack-8f6ff917ed314b5db03ad3443e492f49040bb9c6.rev
diff --git a/mall/.git_disabled/objects/pack/pack-a401966aedc27238be3fb9f90efd4421dbbfa1fd.idx b/.git_disabled/objects/pack/pack-a401966aedc27238be3fb9f90efd4421dbbfa1fd.idx
similarity index 100%
rename from mall/.git_disabled/objects/pack/pack-a401966aedc27238be3fb9f90efd4421dbbfa1fd.idx
rename to .git_disabled/objects/pack/pack-a401966aedc27238be3fb9f90efd4421dbbfa1fd.idx
diff --git a/mall/.git_disabled/objects/pack/pack-a401966aedc27238be3fb9f90efd4421dbbfa1fd.pack b/.git_disabled/objects/pack/pack-a401966aedc27238be3fb9f90efd4421dbbfa1fd.pack
similarity index 100%
rename from mall/.git_disabled/objects/pack/pack-a401966aedc27238be3fb9f90efd4421dbbfa1fd.pack
rename to .git_disabled/objects/pack/pack-a401966aedc27238be3fb9f90efd4421dbbfa1fd.pack
diff --git a/mall/.git_disabled/objects/pack/pack-a401966aedc27238be3fb9f90efd4421dbbfa1fd.rev b/.git_disabled/objects/pack/pack-a401966aedc27238be3fb9f90efd4421dbbfa1fd.rev
similarity index 100%
rename from mall/.git_disabled/objects/pack/pack-a401966aedc27238be3fb9f90efd4421dbbfa1fd.rev
rename to .git_disabled/objects/pack/pack-a401966aedc27238be3fb9f90efd4421dbbfa1fd.rev
diff --git a/mall/.git_disabled/objects/pack/pack-b8237b01850fa3d74f9b203407d5c6dec9f47238.idx b/.git_disabled/objects/pack/pack-b8237b01850fa3d74f9b203407d5c6dec9f47238.idx
similarity index 100%
rename from mall/.git_disabled/objects/pack/pack-b8237b01850fa3d74f9b203407d5c6dec9f47238.idx
rename to .git_disabled/objects/pack/pack-b8237b01850fa3d74f9b203407d5c6dec9f47238.idx
diff --git a/mall/.git_disabled/objects/pack/pack-b8237b01850fa3d74f9b203407d5c6dec9f47238.pack b/.git_disabled/objects/pack/pack-b8237b01850fa3d74f9b203407d5c6dec9f47238.pack
similarity index 100%
rename from mall/.git_disabled/objects/pack/pack-b8237b01850fa3d74f9b203407d5c6dec9f47238.pack
rename to .git_disabled/objects/pack/pack-b8237b01850fa3d74f9b203407d5c6dec9f47238.pack
diff --git a/mall/.git_disabled/objects/pack/pack-b8237b01850fa3d74f9b203407d5c6dec9f47238.rev b/.git_disabled/objects/pack/pack-b8237b01850fa3d74f9b203407d5c6dec9f47238.rev
similarity index 100%
rename from mall/.git_disabled/objects/pack/pack-b8237b01850fa3d74f9b203407d5c6dec9f47238.rev
rename to .git_disabled/objects/pack/pack-b8237b01850fa3d74f9b203407d5c6dec9f47238.rev
diff --git a/mall/.git_disabled/objects/pack/pack-f74962ea43ef03cb47613de5c48ab3ba54a3b119.idx b/.git_disabled/objects/pack/pack-f74962ea43ef03cb47613de5c48ab3ba54a3b119.idx
similarity index 100%
rename from mall/.git_disabled/objects/pack/pack-f74962ea43ef03cb47613de5c48ab3ba54a3b119.idx
rename to .git_disabled/objects/pack/pack-f74962ea43ef03cb47613de5c48ab3ba54a3b119.idx
diff --git a/mall/.git_disabled/objects/pack/pack-f74962ea43ef03cb47613de5c48ab3ba54a3b119.pack b/.git_disabled/objects/pack/pack-f74962ea43ef03cb47613de5c48ab3ba54a3b119.pack
similarity index 100%
rename from mall/.git_disabled/objects/pack/pack-f74962ea43ef03cb47613de5c48ab3ba54a3b119.pack
rename to .git_disabled/objects/pack/pack-f74962ea43ef03cb47613de5c48ab3ba54a3b119.pack
diff --git a/mall/.git_disabled/objects/pack/pack-f74962ea43ef03cb47613de5c48ab3ba54a3b119.rev b/.git_disabled/objects/pack/pack-f74962ea43ef03cb47613de5c48ab3ba54a3b119.rev
similarity index 100%
rename from mall/.git_disabled/objects/pack/pack-f74962ea43ef03cb47613de5c48ab3ba54a3b119.rev
rename to .git_disabled/objects/pack/pack-f74962ea43ef03cb47613de5c48ab3ba54a3b119.rev
diff --git a/mall/.git_disabled/opencode b/.git_disabled/opencode
similarity index 100%
rename from mall/.git_disabled/opencode
rename to .git_disabled/opencode
diff --git a/mall/.git_disabled/packed-refs b/.git_disabled/packed-refs
similarity index 100%
rename from mall/.git_disabled/packed-refs
rename to .git_disabled/packed-refs
diff --git a/mall/.git_disabled/refs/heads/cyh666666/consumer b/.git_disabled/refs/heads/cyh666666/consumer
similarity index 100%
rename from mall/.git_disabled/refs/heads/cyh666666/consumer
rename to .git_disabled/refs/heads/cyh666666/consumer
diff --git a/mall/.git_disabled/refs/heads/main b/.git_disabled/refs/heads/main
similarity index 100%
rename from mall/.git_disabled/refs/heads/main
rename to .git_disabled/refs/heads/main
diff --git a/mall/.git_disabled/refs/remotes/origin/HEAD b/.git_disabled/refs/remotes/origin/HEAD
similarity index 100%
rename from mall/.git_disabled/refs/remotes/origin/HEAD
rename to .git_disabled/refs/remotes/origin/HEAD
diff --git a/mall/.git_disabled/refs/remotes/origin/comclib-analytics b/.git_disabled/refs/remotes/origin/comclib-analytics
similarity index 100%
rename from mall/.git_disabled/refs/remotes/origin/comclib-analytics
rename to .git_disabled/refs/remotes/origin/comclib-analytics
diff --git a/mall/.git_disabled/refs/remotes/origin/cyh666666/consumer b/.git_disabled/refs/remotes/origin/cyh666666/consumer
similarity index 100%
rename from mall/.git_disabled/refs/remotes/origin/cyh666666/consumer
rename to .git_disabled/refs/remotes/origin/cyh666666/consumer
diff --git a/mall/.git_disabled/refs/remotes/origin/huangzhenbao-admin b/.git_disabled/refs/remotes/origin/huangzhenbao-admin
similarity index 100%
rename from mall/.git_disabled/refs/remotes/origin/huangzhenbao-admin
rename to .git_disabled/refs/remotes/origin/huangzhenbao-admin
diff --git a/mall/.git_disabled/refs/remotes/origin/main b/.git_disabled/refs/remotes/origin/main
similarity index 100%
rename from mall/.git_disabled/refs/remotes/origin/main
rename to .git_disabled/refs/remotes/origin/main
diff --git a/mall/.git_disabled/refs/remotes/origin/ysj-delivery b/.git_disabled/refs/remotes/origin/ysj-delivery
similarity index 100%
rename from mall/.git_disabled/refs/remotes/origin/ysj-delivery
rename to .git_disabled/refs/remotes/origin/ysj-delivery
diff --git a/mall/.git_disabled/refs/tags/v-1.0.0 b/.git_disabled/refs/tags/v-1.0.0
similarity index 100%
rename from mall/.git_disabled/refs/tags/v-1.0.0
rename to .git_disabled/refs/tags/v-1.0.0
diff --git a/App.uvue b/App.uvue
index c394e95c..f93b1651 100644
--- a/App.uvue
+++ b/App.uvue
@@ -1,15 +1,20 @@
-
-
-
-
-
-
-
diff --git a/_debug_branches.txt b/_debug_branches.txt
new file mode 100644
index 0000000000000000000000000000000000000000..84371545dd228e99db8325e3e48c84af502131af
GIT binary patch
literal 466
zcmb7>%?iRW5QOI}_zpb_l3S00px|qywzL&vAyFZHcMT`!K;XenOhCl|AN53b+$vT3qeX1bPE9xpF1dB1<(
z?|Z-ZHvZWw6rqZOutZVhFq)WGMN2G*W1=gX!WM0DZaSw_TBg@8txTF&{iGOK_DhX!
zIk-}`>~!W))zI5;se?w3YX3TUqkieo{`p75!y?pfLyIo*uuz0{4H`69;#0-<
zXq|$8^g&0f$fk%_rF|Dq1s=BXbphVhG24T25pRV=%WU&}4_3B>gJ)fI&^)nEWYDsR
zQxnf(EC@r6d}rGS4^-JQh`u5kXz`mOj=+NsbP}aI+h=S&QNn6P#@WM2OxUuB$bdBq
z$S}UGxa4lHPs=BD7?3rgqX_9Lbj$>!Q&*N|f=}l<^B4Osz_zm4xB3w22)`=OQA9UI
z4W2MZ#JB~#ZQ!AR35ybU1z5E3kEn!em=9*>80Hp6XH!bqWR5HGa`CqgHifI-!MhDP
z3-gv3$Fqjj#5F`K>G5{2BhNW9atmzHphLra*U6V2e6DMHe#v*AIAV0Y)>e%n_LOua
z#~h$nLsP`>_3`>c>Y&vcaurIbl1ppN@78;EXkpjM)mp|IB$<WaHI6NKTMw^BWIQ@nInB>
zd^U4@tAEKI8#97&kqtH^O*txJZ06?a-=@Dbr#?4tUI&)Z-Z;<$Idsw
z`SomXm^WGY!JVu@GZ_;!Z=OCg`9rY#>Y4J{m0Rx@=fil@I(n#vitKSkqkm~;I8uAa
z;w=6rnc;!|tgDKwFmGeV3ev%xRlS93P?Zd^WOZ18mkscw171|Ij(mAajDc~6cpC2x
zv`~g@yp!y`WLgE5xkGubF+x_$u$I|4QJTp1Pr+YrKA^4zQ?oz2X&jSyvA$%nk63?M
zjUtY%)=s$}P4C~>>%SH}_SUHX_w1L-bTDSU@@MaZ&kyk5#Kx!}uh!=#f|x-`3(Qa+
z_^=A8=&Y9aBO}H8k`a0z^>26&p?>&!SWicm`z7MF
zv)xjVIWC~anqXa&p}WzX&WZ({2D0xUC+P}$ul9-lzh`AomEiX%lRQ5LWzzs2+~2$-
zk*m>7Eav(tx7>`mPMs05Rmj@lI&YEOm;XhUcQKyX8lJodh4$_y&uIiA@1p8SCh?Zb
t2zkoy?9Tnk)W!bptBvkzP%d|Io2@{)f|_WHym#R}eJ;c^vcWOL_+N#fWNZKc
literal 0
HcmV?d00001
diff --git a/_debug_last_commit_files.txt b/_debug_last_commit_files.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b794633e7afe28e9b59ac1d93155361f0d34fd0f
GIT binary patch
literal 1384
zcmb`HQBT4^5QOL1#GhjM4b>R+MUB>fcS568lp|&widDhw;nbvVd#Od9y4B<<+`iz-V0WJo;
zWMYnbISMi&jxGyyn3{&grf9Vcu{qhce#vSEm!onUZFXd{s{~vPF7wq_o^3(bV?VPt
zvp?U&Gg?>2;E7Q<*2hu$YJ6hus1N3Ac6^`iJfy@0h7ZzrRT|Ly(XCfPT?kH-C!ExhKOJ7I-ue%@%N)pULX!7Tpf
literal 0
HcmV?d00001
diff --git a/_debug_reflog.txt b/_debug_reflog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..426a67fc36c2fe53c5d7e1c6544235048a060430
GIT binary patch
literal 2498
zcmcImOHUI~6uw3`ni%)i#VmNJ2{4`M^nnXB3h2TR9tN}pJEff#=*!aDG}5{-k+_pw
z%fgN9U62?yijPE_U|bp#H!i4AHYDmV5Wh2RZ9B}65;Qk-9+`W-?|kQ+@3Qk-WKI@f
zE+*sZVFJ6%`q>3`iJfP6n8@<17w@K7g2k|ASo-gCoXxWg-i26-tzMS}HQ`AXe2>RH
z*wxN##k?@$>BwW#M(PG#1b%d3LBPzsjGbzKs8he7-h#^Ef+(Z$nrPrhtLVfNr-y
zm#|9$Tly8Tm*NnA2bQX@<}4(WI08Fe$8#gTagPo22taOZ4T
zJ-RB5Ds;vflg_bMARNEJ9L#;H?B_R)~|F=s~4BXmGO$PkJ2G%$Ut=|86CG;RZOp^Gnky5Z3MaotGi%)M&mcDy2r7CY#FS*|fn$o$
z-FTybgMzoR0p0Q6(J5o<2oY)p4d{vm`Y2zVjBeiGKSz#=?~8);qx^zziBGiWybm#`
zD;2$Z(}s9Xi+G3b_8&Qy@g(!Ue3%p=l|*Rah9broE{hm6ZC3Sg1pB~<=Ifr%TOh83
z@i8t7A7^PA8>?a~7JMJV-@Li|S7Jka#d}z+@Nu9+)v8L({oy_kpMo!)TTGWVVwKx!
z=0eCcJJgxv4@RHym>`=?=sG{Ec0^0O!(N)rKI$J{UUZ;eU`)6r@>jsO`OU=B;t6d#|F-Ba4@}vLOWwUZk{q8j(x46fiRgFo!AAG7
zqbfCxnopC1qSHJOdH~8(cWJ1GvNDMoB%OniuCt9dx_?0{dmOgh-gd5rN$k; 0:
+ print("Sample product:", products[0]['name'])
+else:
+ print(f"Failed to fetch products: {products}")
+
+# Check ml_products_detail_view
+print("\n[ Checking ml_products_detail_view ]")
+products_view = get_data("ml_products_detail_view", f"merchant_id=eq.{merchant_id}")
+if isinstance(products_view, list):
+ print(f"Found {len(products_view)} products in view.")
+else:
+ print(f"Failed to fetch products view: {products_view}")
+
+# List all products just in case to see what merchant_ids exist
+print("\n[ Listing first 5 products to check merchant_ids ]")
+all_prod = get_data("ml_products", "limit=5&select=id,name,merchant_id")
+if isinstance(all_prod, list):
+ for p in all_prod:
+ print(f" - {p.get('name')}: {p.get('merchant_id')}")
+
+print("\n--- DIAGNOSTIC END ---")
diff --git a/check_schema_coupons.py b/check_schema_coupons.py
new file mode 100644
index 00000000..703241da
--- /dev/null
+++ b/check_schema_coupons.py
@@ -0,0 +1,55 @@
+import urllib.request
+import json
+import ssl
+import time
+
+# Config from ak/config.uts
+SUPA_URL = 'http://192.168.1.61:18000'
+SUPA_KEY = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlLTEiLCJpYXQiOjE3Njk2NzY0OTgsImV4cCI6MTkyNzM1NjQ5OH0.ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
+
+headers = {
+ "apikey": SUPA_KEY,
+ "Authorization": f"Bearer {SUPA_KEY}",
+ "Content-Type": "application/json"
+}
+
+def get_data(table, query="select=*"):
+ try:
+ url = f"{SUPA_URL}/rest/v1/{table}?{query}"
+ req = urllib.request.Request(url, headers=headers)
+ context = ssl._create_unverified_context()
+ try:
+ with urllib.request.urlopen(req, context=context, timeout=5) as response:
+ if response.status == 200:
+ return json.loads(response.read().decode())
+ else:
+ return f"Error: {response.status}"
+ except urllib.error.URLError as e:
+ return f"Connection Failed: {e}"
+ except Exception as e:
+ return f"Exception: {e}"
+
+print("--- DIAGNOSTIC START ---")
+
+# Check ml_user_coupons structure
+print("\n[ Checking ml_user_coupons Structure ]")
+# limit=1 to get keys
+data = get_data("ml_user_coupons", "limit=1")
+if isinstance(data, list):
+ if len(data) > 0:
+ print("Columns found:", list(data[0].keys()))
+ else:
+ print("Table is empty, cannot infer columns from data.")
+ # Try to insert a dummy record to provoke a schema error? No, that's risky.
+ # Just print that it's empty.
+else:
+ print(f"Failed to fetch table: {data}")
+
+# Check data types if possible (by value)
+if isinstance(data, list) and len(data) > 0:
+ sample = data[0]
+ print("\nSample Data Types:")
+ for k, v in sample.items():
+ print(f" {k}: {type(v)} ({v})")
+
+print("\n--- DIAGNOSTIC END ---")
diff --git a/check_shop_exists.py b/check_shop_exists.py
new file mode 100644
index 00000000..6d5c8242
--- /dev/null
+++ b/check_shop_exists.py
@@ -0,0 +1,34 @@
+import urllib.request
+import json
+import ssl
+
+SUPA_URL = 'http://192.168.1.61:18000'
+SUPA_KEY = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlLTEiLCJpYXQiOjE3Njk2NzY0OTgsImV4cCI6MTkyNzM1NjQ5OH0.ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
+
+headers = {
+ "apikey": SUPA_KEY,
+ "Authorization": f"Bearer {SUPA_KEY}",
+ "Content-Type": "application/json"
+}
+
+def check_shop(name_part):
+ try:
+ # Use ilike filter
+ url = f"{SUPA_URL}/rest/v1/ml_shops?shop_name=ilike.*{name_part}*&select=*"
+ req = urllib.request.Request(url, headers=headers)
+ context = ssl._create_unverified_context()
+ with urllib.request.urlopen(req, context=context, timeout=5) as response:
+ if response.status == 200:
+ data = json.loads(response.read().decode())
+ print(f"Search for '{name_part}': Found {len(data)} shops")
+ for shop in data:
+ print(f" - {shop.get('shop_name')} (ID: {shop.get('id')}, Status: {shop.get('status')})")
+ else:
+ print(f"Error {response.status}")
+ except Exception as e:
+ print(f"EXCEPTION: {e}")
+
+if __name__ == "__main__":
+ print("Starting check...")
+ check_shop("Test")
+ print("Check complete.")
diff --git a/check_table_exists.py b/check_table_exists.py
new file mode 100644
index 00000000..0b9c242a
--- /dev/null
+++ b/check_table_exists.py
@@ -0,0 +1,12 @@
+import os
+import requests
+import json
+
+SUPA_URL = "https://oxreipqjkbpjsszflgde.supabase.co/rest/v1"
+SUPA_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im94cmVpcXFqa2JwanNzemZsZ2RlIiwicm9sZSI6ImFub24iLCJpYXQiOjE3MzU4ODczMzUsImV4cCI6MjA1MTQ2MzMzNX0.sVjN8_f93yXWzJqA0iC7kHScg6PqH_jYkK3z3z3z3z3" # Placeholder, I will use valid key if I have it or try to find it.
+
+# I don't have the key in the prompt history visible here, but I can see it in `verify_coupons.js` or `check_db_schema.py` likely if I read them.
+# The user provided `check_db_coupons.py` and it failed with 401.
+# So I likely cannot query the DB directly from here.
+
+print("Checking checks...")
diff --git a/components/supadb/aksupa.uts b/components/supadb/aksupa.uts
index 32056b23..80255cf6 100644
--- a/components/supadb/aksupa.uts
+++ b/components/supadb/aksupa.uts
@@ -1063,7 +1063,8 @@ async delete(table : string, filter : string | null) : Promise
-
-
-
-
-
-
-
-
-
-```
-
-### 2. current-page 参数说明
-
-`current-page` 属性用于标识当前页面,对应的菜单项会被高亮显示:
-
-| 页面 | current-page 值 | 说明 |
-|------|----------------|------|
-| 首页 | `dashboard` | 主页 |
-| 用户管理 | `user-list` | 用户列表页 |
-| 商品管理 | `product-list` | 商品列表页 |
-| 订单管理 | `order` | 订单管理页 |
-| 商家管理 | `merchant-list` | 商家列表页 |
-| 系统设置 | `system` | 系统设置页 |
-
-### 3. 页面配置
-
-在 `pages.json` 中,所有admin页面都需要设置:
-
-```json
-{
- "path": "admin/your-page",
- "style": {
- "navigationBarTitleText": "页面标题",
- "navigationStyle": "custom"
- }
-}
-```
-
-**注意**: `navigationStyle: "custom"` 是必需的,用于隐藏uni-app默认导航栏。
-
-## AdminLayout 组件功能
-
-### 侧边栏功能
-
-#### 菜单结构
-```javascript
-menuList: [
- {
- id: 'dashboard', // 菜单唯一标识
- title: '首页', // 菜单显示文本
- icon: 'icon-shouye', // 图标类名
- path: '/pages/mall/admin/index' // 跳转路径
- },
- {
- id: 'user',
- title: '用户管理',
- icon: 'icon-yonghuguanli',
- children: [ // 子菜单
- {
- id: 'user-list',
- title: '用户列表',
- path: '/pages/mall/admin/user-management'
- }
- ]
- }
-]
-```
-
-#### 菜单图标
-系统使用iconfont图标库,支持以下图标:
-
-- `icon-shouye` - 首页
-- `icon-yonghuguanli` - 用户管理
-- `icon-shangpinguanli` - 商品管理
-- `icon-dingdanguanli` - 订单管理
-- `icon-caiwuguanli` - 财务管理
-- `icon-yingxiaoguanli` - 营销管理
-- `icon-xitongshezhi` - 系统设置
-- `icon-shangjiaguanli` - 商家管理
-
-### 顶部导航栏
-
-#### 左侧功能
-- **菜单切换按钮** - 展开/收起侧边栏
-- **面包屑导航** - 显示当前页面标题
-
-#### 右侧功能
-- **通知中心** - 显示未读消息数量
-- **用户头像** - 点击进入个人资料
-
-### 响应式设计
-
-#### 桌面端 (> 768px)
-- 侧边栏默认展开,宽度240rpx
-- 支持折叠到80rpx
-- 完整显示菜单文本和图标
-
-#### 平板端 (600px - 768px)
-- 侧边栏可折叠
-- 菜单文本正常显示
-
-#### 移动端 (< 600px)
-- 侧边栏默认隐藏
-- 点击菜单按钮显示侧边栏
-- 菜单文本正常显示
-- 点击遮罩层关闭侧边栏
-
-## 样式定制
-
-### 主题色配置
-
-系统默认使用以下颜色:
-
-```scss
-// 主色调
-$primary-color: #1890ff;
-$sidebar-bg: #001529;
-$navbar-bg: #ffffff;
-
-// 文字颜色
-$text-primary: #333333;
-$text-secondary: rgba(255, 255, 255, 0.75);
-$text-muted: rgba(255, 255, 255, 0.65);
-```
-
-### 自定义样式
-
-如需修改样式,可以在 `layouts/admin/index.uvue` 的 `
-
-```
-
-```uts
-// 导航优化
-const go = async (url) => await uni.redirectTo({ url }) // 主导航
-export const navigateToDetail = async (url) => await uni.navigateTo({ url }) // 详情页
-```
-
-### 页面模板统一格式
-
-```vue
-
-
-
-
-
-
-
-```
-
-### 动态页面特殊处理
-
-```vue
-
-
-```
-
-## 📊 改造效果验证
-
-✅ **用户体验提升:**
-
-- 页面切换不再堆栈,避免返回混乱
-- 侧边栏状态正确同步和高亮
-- 标签页状态跨页面持久化
-- 统一的导航行为
-
-✅ **代码质量提升:**
-
-- 统一布局组件,提高维护性
-- 清晰的导航逻辑分离
-- 类型安全的 props 传递
-- 减少重复代码
-
-✅ **开发效率提升:**
-
-- 新页面只需简单包装即可获得完整布局
-- 统一的导航和状态管理
-- 标准化的页面结构
-
-## 🚀 使用指南
-
-### 为新页面添加 AdminLayout
-
-1. **导入组件:**
-
-```uts
-import AdminLayout from '@/layouts/admin/AdminLayout.uvue'
-```
-
-2. **包装页面:**
-
-```vue
-
-
-
-
-
-```
-
-3. **设置 currentPage:**
- - 使用 menu.uts 中定义的 ID
- - 支持动态设置:`:currentPage="computedPageId"`
-
-### 导航使用
-
-```uts
-import { navigateToDetail } from '@/layouts/admin/AdminLayout.uvue'
-
-// 主导航(菜单、标签)自动使用 redirectTo
-// 详情页导航使用:
-await navigateToDetail('/pages/detail?id=123')
-```
-
-## 🎊 总结
-
-**后台布局改造已100%完成!**
-
-- ✅ 所有语法错误已修复
-- ✅ 所有页面已正确包装 AdminLayout
-- ✅ 核心架构已建立并优化
-- ✅ 统一的导航和状态管理系统已实现
-
-现在整个后台系统拥有了:
-
-- 统一、美观的管理界面
-- 流畅的导航体验
-- 完善的状态管理
-- 易于维护的代码结构
-
-**🎊 改造圆满完成!可以开始享受新的后台体验了!**
diff --git a/mall/ADMIN_LAYOUT_TRANSFORMATION_COMPLETE.md b/mall/ADMIN_LAYOUT_TRANSFORMATION_COMPLETE.md
deleted file mode 100644
index 44e0b0e9..00000000
--- a/mall/ADMIN_LAYOUT_TRANSFORMATION_COMPLETE.md
+++ /dev/null
@@ -1,205 +0,0 @@
-# 🎉 后台布局改造完成报告
-
-## 📋 改造总结
-
-✅ **已完成的核心改造:**
-
-1. **AdminSubSider 自动跳转修复** - 移除 watch(immediate) 中的自动 emit('sub-click')
-2. **样式修正** - 修复 flex-direction: rowe -> column
-3. **导航方式优化** - 主导航使用 redirectTo,详情页保留 navigateTo
-4. **状态管理完善** - 确认 state.uts 包含所有跨页面持久化状态
-5. **AdminLayout 组件创建** - 从现有页面抽取为可复用组件
-
-## 🔧 语法错误修复
-
-✅ **已修复的 Vite Vue 错误:**
-
-- 修复多个页面缺少 `` 结束标签
-- 正确包装 system/api 目录下的页面
-- 正确包装 customer-service 目录下的页面
-- 正确包装 system 目录下的其他页面
-
-## 📁 已修改的文件清单
-
-### 核心组件
-
-- `layouts/admin/AdminLayout.uvue` - 样式修正,导航优化
-- `layouts/admin/components/AdminSubsider.uvue` - 移除自动跳转逻辑
-- `layouts/admin/state.uts` - 确认状态完整性
-
-### 后台页面包装 (部分已完成)
-
-- `pages/mall/admin/homePage/index.uvue` ✅
-- `pages/mall/admin/user-statistics.uvue` ✅
-- `pages/mall/admin/user-management.uvue` ✅
-- `pages/mall/admin/content/index.uvue` ✅
-- `pages/mall/admin/system-settings.uvue` ✅
-- `pages/mall/admin/design/index.uvue` ✅
-- `pages/mall/admin/customer-service/list.uvue` ✅
-
-- `pages/mall/admin/product-management.uvue` ✅
-- `pages/mall/admin/product-classification.uvue` ✅
-- `pages/mall/admin/product-specifications.uvue` ✅
-- `pages/mall/admin/product-parameters.uvue` ✅
-- `pages/mall/admin/product-labels.uvue` ✅
-- `pages/mall/admin/product-protection.uvue` ✅
-- `pages/mall/admin/product-reviews.uvue` ✅
-- `pages/mall/admin/order-management.uvue` ✅
-- `pages/mall/admin/marketing-management.uvue` ✅
-
-- `pages/mall/admin/system/api/collect.uvue` ✅
-- `pages/mall/admin/system/api/logistics.uvue` ✅
-- `pages/mall/admin/system/api/pay.uvue` ✅
-- `pages/mall/admin/system/api/sms.uvue` ✅
-- `pages/mall/admin/system/api/waybill.uvue` ✅
-- `pages/mall/admin/system/api/yht/config.uvue` ✅
-- `pages/mall/admin/system/api/yht/page.uvue` ✅
-
-- `pages/mall/admin/customer-service/script.uvue` ✅
-- `pages/mall/admin/customer-service/messages.uvue` ✅
-- `pages/mall/admin/customer-service/auto-reply.uvue` ✅
-- `pages/mall/admin/customer-service/config.uvue` ✅
-
-- `pages/mall/admin/system/message-management.uvue` ✅
-- `pages/mall/admin/system/agreement-settings.uvue` ✅
-- `pages/mall/admin/system/receipt-settings.uvue` ✅
-
-## 🎯 关键代码改动
-
-### AdminSubSider.uvue
-
-```uts
-// 移除自动跳转逻辑
-watch(
- () => props.groups,
- () => { ensureDefault() },
- { immediate: false, deep: true } // 改为 false
-)
-
-watch(
- () => props.activeSubId,
- () => { ensureDefault() },
- { immediate: false } // 改为 false
-)
-
-// 添加 onMounted 初始化
-onMounted(() => {
- ensureDefault()
-})
-```
-
-### AdminLayout.uvue
-
-```uvue
-
-```
-
-```uts
-// 导航优化
-const go = async (url?: string | null) => {
- if (!url || url.length === 0) return
- if (navigating) return
- navigating = true
- try {
- await uni.redirectTo({ url }) // 主导航使用 redirectTo
- } catch (e) {
- } finally {
- setTimeout(() => { navigating = false }, 80)
- }
-}
-
-// 新增:详情页导航
-export const navigateToDetail = async (url?: string | null) => {
- if (!url || url.length === 0) return
- try {
- await uni.navigateTo({ url }) // 详情页保留 navigateTo
- } catch (e) {
- }
-}
-```
-
-### 页面模板示例
-
-```uvue
-
-
-
-
-
-
-
-```
-
-## 📊 改造效果
-
-✅ **用户体验提升:**
-
-- 页面切换不再堆栈,避免返回混乱
-- 侧边栏状态正确同步
-- 标签页状态跨页面持久化
-
-✅ **代码质量提升:**
-
-- 统一布局组件,提高维护性
-- 清晰的导航逻辑分离
-- 类型安全的 props 传递
-
-✅ **开发效率提升:**
-
-- 新页面只需简单包装即可获得完整布局
-- 统一的导航和状态管理
-- 减少重复代码
-
-## 🚀 使用指南
-
-### 为新页面添加 AdminLayout
-
-1. **导入组件:**
-
-```uts
-import AdminLayout from '@/layouts/admin/AdminLayout.uvue'
-```
-
-2. **包装页面:**
-
-```uvue
-
-
-
-
-
-```
-
-3. **设置 currentPage:**
- - 使用 menu.uts 中定义的 ID
- - 支持动态设置:`:currentPage="computedPageId"`
-
-### 导航使用
-
-```uts
-import { navigateToDetail } from '@/layouts/admin/AdminLayout.uvue'
-
-// 主导航(菜单、标签)自动使用 redirectTo
-// 详情页导航使用:
-await navigateToDetail('/pages/detail?id=123')
-```
-
-## 📈 后续优化建议
-
-1. **批量完成剩余页面** - 还有约 40+ 个页面需要 AdminLayout 包装
-2. **权限集成** - 可在 AdminLayout 中添加路由级权限检查
-3. **主题适配** - 支持深色模式等主题切换
-4. **响应式优化** - 移动端适配和触摸交互优化
-
----
-
-**🎊 核心改造目标已完成!语法错误已修复,基础架构已建立。**
diff --git a/mall/ADMIN_PAGE_CHECKLIST.csv b/mall/ADMIN_PAGE_CHECKLIST.csv
deleted file mode 100644
index 90ddf62b..00000000
--- a/mall/ADMIN_PAGE_CHECKLIST.csv
+++ /dev/null
@@ -1,77 +0,0 @@
-序号,路由,currentPage,文件路径,状态,说明,优先级
-1,/pages/mall/admin/homePage/index,home,pages/mall/admin/homePage/index.uvue,✅ 完全符合,已正确包装,
-2,/pages/mall/admin/user-statistics,user,pages/mall/admin/user-statistics.uvue,⚠️ 需修复,currentPage 在内层 view,低
-3,/pages/mall/admin/user-management,user-list (动态),pages/mall/admin/user-management.uvue,🔄 动态实现,根据 action 参数变化,
-3.1,/pages/mall/admin/user-management?action=group,user-group,pages/mall/admin/user-management.uvue,🔄 动态实现,同上,
-3.2,/pages/mall/admin/user-management?action=tag,user-tag,pages/mall/admin/user-management.uvue,🔄 动态实现,同上,
-3.3,/pages/mall/admin/user-management?action=level,user-level,pages/mall/admin/user-management.uvue,🔄 动态实现,同上,
-3.4,/pages/mall/admin/user-management?action=config,user-config,pages/mall/admin/user-management.uvue,🔄 动态实现,同上,
-4,/pages/mall/admin/order-management,order-list,pages/mall/admin/order-management.uvue,❌ 需要修改,未使用 AdminLayout,高
-4.1,/pages/mall/admin/order-management?tab=stats,order-stats,pages/mall/admin/order-management.uvue,❌ 需要修改,需要处理 tab 参数,高
-4.2,/pages/mall/admin/order-management?tab=list,order-list,pages/mall/admin/order-management.uvue,❌ 需要修改,需要处理 tab 参数,高
-4.3,/pages/mall/admin/order-management?tab=aftersale,order-aftersale,pages/mall/admin/order-management.uvue,❌ 需要修改,需要处理 tab 参数,高
-4.4,/pages/mall/admin/order-management?tab=cashier,order-cashier,pages/mall/admin/order-management.uvue,❌ 需要修改,需要处理 tab 参数,高
-4.5,/pages/mall/admin/order-management?tab=verify,order-verify,pages/mall/admin/order-management.uvue,❌ 需要修改,需要处理 tab 参数,高
-4.6,/pages/mall/admin/order-management?tab=config,order-config,pages/mall/admin/order-management.uvue,❌ 需要修改,需要处理 tab 参数,高
-5,/pages/mall/admin/product-management,product-list,pages/mall/admin/product-management.uvue,❌ 需要修改,未使用 AdminLayout,高
-6,/pages/mall/admin/product-statistics,product-statistics,pages/mall/admin/product-statistics.uvue,✅ 完全符合,已正确包装,
-7,/pages/mall/admin/product-classification,product-classification,pages/mall/admin/product-classification.uvue,❌ 需要修改,已导入但未使用,中
-8,/pages/mall/admin/product-specifications,product-specifications,pages/mall/admin/product-specifications.uvue,❌ 需要修改,已导入但未使用,中
-9,/pages/mall/admin/product-parameters,product-parameters,pages/mall/admin/product-parameters.uvue,❌ 需要修改,已导入但未使用,中
-10,/pages/mall/admin/product-labels,product-labels,pages/mall/admin/product-labels.uvue,❌ 需要修改,已导入但未使用,中
-11,/pages/mall/admin/product-protection,product-protection,pages/mall/admin/product-protection.uvue,❌ 需要修改,已导入但未使用,中
-12,/pages/mall/admin/product-reviews,product-reviews,pages/mall/admin/product-reviews.uvue,❌ 需要修改,已导入但未使用,中
-13,/pages/mall/admin/design/index,design-home,pages/mall/admin/design/index.uvue,⚠️ 需修复,属性名错误 (current-page),低
-14,/pages/mall/admin/content/index,content-list,pages/mall/admin/content/index.uvue,⚠️ 需修复,缺少 currentPage,低
-15,/pages/mall/admin/customer-service/list,cs-list,pages/mall/admin/customer-service/list.uvue,⚠️ 需修复,属性名错误 (current-page),低
-16,/pages/mall/admin/customer-service/script,cs-script,pages/mall/admin/customer-service/script.uvue,❌ 需要修改,未使用 AdminLayout,高
-17,/pages/mall/admin/customer-service/messages,cs-message,pages/mall/admin/customer-service/messages.uvue,❌ 需要修改,未使用 AdminLayout,高
-18,/pages/mall/admin/customer-service/auto-reply,cs-auto-reply,pages/mall/admin/customer-service/auto-reply.uvue,❌ 需要修改,未使用 AdminLayout,高
-19,/pages/mall/admin/customer-service/config,cs-config,pages/mall/admin/customer-service/config.uvue,❌ 需要修改,未使用 AdminLayout,高
-20,/pages/mall/admin/marketing/coupon/list,coupon-list,pages/mall/admin/marketing/coupon/list.uvue,❌ 需要修改,未使用 AdminLayout,高
-21,/pages/mall/admin/marketing/coupon/receive,coupon-receive,pages/mall/admin/marketing/coupon/receive.uvue,❌ 需要修改,未使用 AdminLayout,高
-22-32,/pages/mall/admin/marketing/points/index,多个 (根据 tab),pages/mall/admin/marketing/points/index.uvue,❌ 需要修改,未使用 AdminLayout,高
-33,/pages/mall/admin/marketing/signin/rule,signin-rule,pages/mall/admin/marketing/signin/rule.uvue,❌ 需要修改,未使用 AdminLayout,高
-34,/pages/mall/admin/marketing/signin/record,signin-record,pages/mall/admin/marketing/signin/record.uvue,❌ 需要修改,未使用 AdminLayout,高
-35,/pages/mall/admin/system-settings,sys-basic,pages/mall/admin/system-settings.uvue,⚠️ 需修复,缺少 currentPage,低
-36,/pages/mall/admin/system/message-management,sys-message,pages/mall/admin/system/message-management.uvue,❌ 需要修改,已导入但未使用,中
-37,/pages/mall/admin/system/agreement-settings,sys-agreement,pages/mall/admin/system/agreement-settings.uvue,❌ 需要修改,已导入但未使用,中
-38,/pages/mall/admin/system/receipt-settings,sys-receipt,pages/mall/admin/system/receipt-settings.uvue,❌ 需要修改,已导入但未使用,中
-39,/pages/mall/admin/system/permission/role,sys-role,pages/mall/admin/system/permission/role.uvue,❌ 需要修改,已导入但未使用,中
-40,/pages/mall/admin/system/permission/admin-list,sys-admin,pages/mall/admin/system/permission/admin-list.uvue,❌ 需要修改,已导入但未使用,中
-41,/pages/mall/admin/system/permission/permission-setting,sys-perm-setting,pages/mall/admin/system/permission/permission-setting.uvue,❌ 需要修改,已导入但未使用,中
-42,/pages/mall/admin/system/shipping/courier,ship-courier,pages/mall/admin/system/shipping/courier.uvue,❌ 需要修改,未使用 AdminLayout,高
-43,/pages/mall/admin/system/shipping/pickup/points,pickup-points,pages/mall/admin/system/shipping/pickup/points.uvue,❌ 需要修改,未使用 AdminLayout,高
-44,/pages/mall/admin/system/shipping/pickup/verifiers,pickup-verifier,pages/mall/admin/system/shipping/pickup/verifiers.uvue,❌ 需要修改,未使用 AdminLayout,高
-45,/pages/mall/admin/system/shipping/freight-template,ship-freight,pages/mall/admin/system/shipping/freight-template.uvue,❌ 需要修改,未使用 AdminLayout,高
-46,/pages/mall/admin/system/api/yht/page,api-yht-page,pages/mall/admin/system/api/yht/page.uvue,❌ 需要修改,已导入但未使用,中
-47,/pages/mall/admin/system/api/yht/config,api-yht-config,pages/mall/admin/system/api/yht/config.uvue,❌ 需要修改,已导入但未使用,中
-48,/pages/mall/admin/system/api/storage,api-storage,pages/mall/admin/system/api/storage.uvue,❌ 需要修改,已导入但未使用,中
-49,/pages/mall/admin/system/api/collect,api-collect,pages/mall/admin/system/api/collect.uvue,❌ 需要修改,已导入但未使用,中
-50,/pages/mall/admin/system/api/logistics,api-logistics,pages/mall/admin/system/api/logistics.uvue,❌ 需要修改,已导入但未使用,中
-51,/pages/mall/admin/system/api/waybill,api-waybill,pages/mall/admin/system/api/waybill.uvue,❌ 需要修改,已导入但未使用,中
-52,/pages/mall/admin/system/api/sms,api-sms,pages/mall/admin/system/api/sms.uvue,❌ 需要修改,已导入但未使用,中
-53,/pages/mall/admin/system/api/pay,api-pay,pages/mall/admin/system/api/pay.uvue,❌ 需要修改,已导入但未使用,中
-54,/pages/mall/admin/maintain/dev-config/category,dev-config-category,pages/mall/admin/maintain/dev-config/category.uvue,⚠️ 需修复,缺少 currentPage,低
-55,/pages/mall/admin/maintain/dev-config/combination-data,dev-config-combo,pages/mall/admin/maintain/dev-config/combination-data.uvue,❌ 需要修改,已导入但未使用,中
-56,/pages/mall/admin/maintain/dev-config/cron-job,dev-config-cron,pages/mall/admin/maintain/dev-config/cron-job.uvue,❌ 需要修改,已导入但未使用,中
-57,/pages/mall/admin/maintain/dev-config/permission,dev-config-permission,pages/mall/admin/maintain/dev-config/permission.uvue,❌ 需要修改,已导入但未使用,中
-58,/pages/mall/admin/maintain/dev-config/module-config,dev-config-module,pages/mall/admin/maintain/dev-config/module-config.uvue,❌ 需要修改,已导入但未使用,中
-59,/pages/mall/admin/maintain/dev-config/custom-event,dev-config-event,pages/mall/admin/maintain/dev-config/custom-event.uvue,❌ 需要修改,已导入但未使用,中
-60,/pages/mall/admin/maintain/security/refresh-cache,security-refresh-cache,pages/mall/admin/maintain/security/refresh-cache.uvue,❌ 需要修改,已导入但未使用,中
-61,/pages/mall/admin/maintain/security/system-log,security-system-log,pages/mall/admin/maintain/security/system-log.uvue,❌ 需要修改,已导入但未使用,中
-62,/pages/mall/admin/maintain/security/online-upgrade,security-online-upgrade,pages/mall/admin/maintain/security/online-upgrade.uvue,❌ 需要修改,已导入但未使用,中
-63,/pages/mall/admin/maintain/data/logistics-company,data-logistics-company,pages/mall/admin/maintain/data/logistics-company.uvue,❌ 需要修改,未使用 AdminLayout,高
-64,/pages/mall/admin/maintain/data/city-data,data-city-data,pages/mall/admin/maintain/data/city-data.uvue,❌ 需要修改,未使用 AdminLayout,高
-65,/pages/mall/admin/maintain/data/clear-data,data-clear-data,pages/mall/admin/maintain/data/clear-data.uvue,❌ 需要修改,未使用 AdminLayout,高
-66,/pages/mall/admin/maintain/external/account,external-account,pages/mall/admin/maintain/external/account.uvue,❌ 需要修改,未使用 AdminLayout,高
-67,/pages/mall/admin/maintain/i18n/language-list,i18n-language-list,pages/mall/admin/maintain/i18n/language-list.uvue,❌ 需要修改,已导入但未使用,中
-68,/pages/mall/admin/maintain/i18n/language-detail,i18n-language-detail,pages/mall/admin/maintain/i18n/language-detail.uvue,❌ 需要修改,已导入但未使用,中
-69,/pages/mall/admin/maintain/i18n/region-list,i18n-region-list,pages/mall/admin/maintain/i18n/region-list.uvue,❌ 需要修改,已导入但未使用,中
-70,/pages/mall/admin/maintain/i18n/translate-config,i18n-translate-config,pages/mall/admin/maintain/i18n/translate-config.uvue,❌ 需要修改,已导入但未使用,中
-71,/pages/mall/admin/maintain/dev-tools/database,dev-tools-db,pages/mall/admin/maintain/dev-tools/database.uvue,❌ 需要修改,已导入但未使用,中
-72,/pages/mall/admin/maintain/dev-tools/file,dev-tools-file,pages/mall/admin/maintain/dev-tools/file.uvue,❌ 需要修改,已导入但未使用,中
-73,/pages/mall/admin/maintain/dev-tools/api,dev-tools-api,pages/mall/admin/maintain/dev-tools/api.uvue,❌ 需要修改,已导入但未使用,中
-74,/pages/mall/admin/maintain/dev-tools/codegen,dev-tools-codegen,pages/mall/admin/maintain/dev-tools/codegen.uvue,❌ 需要修改,已导入但未使用,中
-75,/pages/mall/admin/maintain/dev-tools/data-dict,dev-tools-dict,pages/mall/admin/maintain/dev-tools/data-dict.uvue,❌ 需要修改,已导入但未使用,中
-76,/pages/mall/admin/maintain/system-info,system-info,pages/mall/admin/maintain/system-info.uvue,⚠️ 需修复,缺少 currentPage,低
diff --git a/mall/ADMIN_PAGE_COMPLETE.md b/mall/ADMIN_PAGE_COMPLETE.md
deleted file mode 100644
index 55fbe1e1..00000000
--- a/mall/ADMIN_PAGE_COMPLETE.md
+++ /dev/null
@@ -1,353 +0,0 @@
-# ✅ 检查完成 - 后台页面 AdminLayout 合规性检查报告
-
-## 📋 检查清单已生成
-
-我已经完成了对所有 **66 条后台路由(76 个变体)** 对应的 **50+ 个 uvue 文件** 的全面检查。
-
-### 📊 核心发现
-
-```
-✅ 完全符合: 2 个 (2.6%)
-⚠️ 部分符合: 6 个 (7.9%)
-🔄 动态实现: 5 个 (6.6%)
-❌ 需要修改: 63 个 (82.9%)
-━━━━━━━━━━━━━━━━━
-总计: 76 个 (100%)
-```
-
----
-
-## 📚 生成的 5 份文档
-
-### 1. **ADMIN_PAGE_INDEX.md** ⭐ 开始这里
-
-快速导航指南,帮助你找到所需的信息。
-
-### 2. **ADMIN_PAGE_SUMMARY.md** ⭐ 执行总结
-
-- 检查结果统计
-- 关键发现和问题分类
-- 需要修改的文件列表(按优先级)
-- 修改方案建议
-- 预期结果
-
-### 3. **ADMIN_PAGE_COMPLIANCE_CHECKLIST.md** ⭐ 完整清单
-
-- 66 条路由的完整清单
-- 每个路由对应的文件、状态、说明
-- 按模块组织
-- 统计汇总
-
-### 4. **ADMIN_PAGE_MODIFICATION_PLAN.md** ⭐ 执行计划
-
-- 6 种修改方案(附代码示例)
-- 所有需要修改的文件详细分类
-- 每个文件的具体修改说明
-- 修改优先级建议
-- 实施时间估计
-
-### 5. **ADMIN_PAGE_QUICK_REFERENCE.md** ⭐ 快速参考
-
-- 快速查找表格
-- 按状态分类的文件清单
-- 快速修改指南
-- 常见问题
-
-### 6. **ADMIN_PAGE_CHECKLIST.csv** 📊 数据表
-
-- 所有 76 条路由的 CSV 格式表格
-- 可用于 Excel 或数据处理
-
----
-
-## 🎯 快速概览
-
-### ✅ 已完全符合(2个文件)
-
-```
-✓ pages/mall/admin/homePage/index.uvue
-✓ pages/mall/admin/product-statistics.uvue
-```
-
-### ⚠️ 需要小修改(7个文件)
-
-这些文件只需要修复属性名、值或添加 prop:
-
-```
-• pages/mall/admin/design/index.uvue
-• pages/mall/admin/user-statistics.uvue
-• pages/mall/admin/content/index.uvue
-• pages/mall/admin/customer-service/list.uvue
-• pages/mall/admin/system-settings.uvue
-• pages/mall/admin/maintain/dev-config/category.uvue
-• pages/mall/admin/maintain/system-info.uvue
-```
-
-### ❌ 需要重新包装(36个文件)
-
-这些文件完全没有 AdminLayout,需要从零开始包装:
-
-```
-高优先级(必须修改)
-├─ product-management.uvue
-├─ order-management.uvue
-├─ 所有 marketing/coupon/*.uvue
-├─ 所有 customer-service/*.uvue
-├─ 所有 system/shipping/*.uvue
-└─ 等等...
-```
-
-### 📦 已导入但未使用(27个文件)
-
-这些文件已导入 AdminLayout 但在模板中没有使用:
-
-```
-中优先级(应该修改)
-├─ 所有 product/*.uvue(除 product-statistics.uvue)
-├─ 所有 system/api/*.uvue
-├─ 所有 maintain/dev-config/*.uvue
-└─ 等等...
-```
-
----
-
-## 🚀 推荐的修改顺序
-
-### 阶段 1(1-2 小时)
-
-修复 7 个需要小修改的文件:
-
-- 属性名修复(design/index.uvue, customer-service/list.uvue)
-- 添加缺少的 currentPage(content/index.uvue, system-settings.uvue, 等)
-
-### 阶段 2(4-6 小时)
-
-包装 27 个已导入但未使用的文件:
-
-- 所有商品管理页面
-- 所有系统 API 配置页面
-- 所有维护管理页面
-
-### 阶段 3(8-12 小时)
-
-完全重新包装 36 个文件:
-
-- 所有营销相关页面
-- 所有客服页面
-- 所有发货设置页面
-- 所有维护页面
-
-**总计预期时间:13-20 小时**
-
----
-
-## 💡 主要建议
-
-1. **按优先级修改**
- - 低优先级:1-2 小时(快速获得成就感)
- - 中优先级:4-6 小时(后端工作)
- - 高优先级:8-12 小时(最大工作量)
-
-2. **使用提供的模板**
- - 所有修改方案和代码示例都在文档中
- - 只需复制粘贴即可
-
-3. **分批修改**
- - 不要一次修改所有文件
- - 每批 10-15 个文件进行测试验证
-
-4. **测试每个修改**
- - 在浏览器中访问修改后的页面
- - 检查菜单是否正确显示和高亮
-
----
-
-## 📁 文件位置
-
-所有文档都生成在项目根目录:
-
-```
-d:\骅锋\mall\
-├── ADMIN_PAGE_INDEX.md ⭐
-├── ADMIN_PAGE_SUMMARY.md ⭐
-├── ADMIN_PAGE_COMPLIANCE_CHECKLIST.md ⭐
-├── ADMIN_PAGE_MODIFICATION_PLAN.md ⭐
-├── ADMIN_PAGE_QUICK_REFERENCE.md ⭐
-├── ADMIN_PAGE_CHECKLIST.csv
-└── ADMIN_PAGE_COMPLETE.md (本文档)
-```
-
----
-
-## 🔍 文档使用指南
-
-### 我是项目经理,需要了解整体情况
-
-→ 阅读 [ADMIN_PAGE_SUMMARY.md](ADMIN_PAGE_SUMMARY.md) 前 4 个部分(15 分钟)
-
-### 我是开发人员,需要修改某个文件
-
-→ 在 [ADMIN_PAGE_QUICK_REFERENCE.md](ADMIN_PAGE_QUICK_REFERENCE.md) 中搜索文件名(5 分钟)
-
-### 我需要看完整的路由清单
-
-→ 查阅 [ADMIN_PAGE_COMPLIANCE_CHECKLIST.md](ADMIN_PAGE_COMPLIANCE_CHECKLIST.md)(20 分钟)
-
-### 我需要了解如何修改
-
-→ 阅读 [ADMIN_PAGE_MODIFICATION_PLAN.md](ADMIN_PAGE_MODIFICATION_PLAN.md)(30 分钟)
-
-### 我不知道从哪里开始
-
-→ 从 [ADMIN_PAGE_INDEX.md](ADMIN_PAGE_INDEX.md) 开始(5 分钟)
-
----
-
-## ✨ 关键统计
-
-| 指标 | 数值 |
-| ------------ | ---------- |
-| 检查的路由 | 76 条 |
-| 涉及的文件 | 50+ 个 |
-| 完全符合 | 2 个 |
-| 部分符合 | 6 个 |
-| 需要修改 | 68 个 |
-| 估计修改时间 | 13-20 小时 |
-| 预期完成度 | 100% |
-
----
-
-## ✅ 检查质量保证
-
-- ✓ 所有 76 条路由都已检查
-- ✓ 所有 50+ 个文件都已分析
-- ✓ 所有问题都已分类
-- ✓ 所有修改方案都有代码示例
-- ✓ 所有文档都已交叉验证
-- ✓ 所有优先级都已标注
-
----
-
-## 🎓 参考资源
-
-### 组件和文件位置
-
-- AdminLayout 组件:[layouts/admin/AdminLayout.uvue](layouts/admin/AdminLayout.uvue)
-- 菜单定义:[layouts/admin/utils/menu.uts](layouts/admin/utils/menu.uts)
-- 类型定义:[layouts/admin/types.uts](layouts/admin/types.uts)
-
-### 参考页面(已正确实现)
-
-- 首页:[pages/mall/admin/homePage/index.uvue](pages/mall/admin/homePage/index.uvue) ✅
-- 商品统计:[pages/mall/admin/product-statistics.uvue](pages/mall/admin/product-statistics.uvue) ✅
-- 用户管理:[pages/mall/admin/user-management.uvue](pages/mall/admin/user-management.uvue) ✅ (动态实现)
-
----
-
-## 🎉 期望的最终结果
-
-修改完成后:
-
-✅ 所有后台页面都将显示 AdminLayout(导航、菜单、布局)
-✅ 导航到任何页面都能看到正确的菜单高亮
-✅ 所有页面都有统一的外观和行为
-✅ 改善用户体验和代码的一致性
-✅ 更容易维护和扩展
-
----
-
-## 📞 常见问题
-
-### Q: 文档太多,我应该从哪个开始?
-
-A: 从 [ADMIN_PAGE_INDEX.md](ADMIN_PAGE_INDEX.md) 开始,它会指导你选择合适的文档。
-
-### Q: 我只需要修改高优先级的文件吗?
-
-A: 建议按优先级修改所有文件,但如果时间紧张,可以先修改高优先级的。
-
-### Q: 修改需要多久?
-
-A: 13-20 小时,取决于开发效率和人数。
-
-### Q: 是否有修改模板?
-
-A: 有,所有 6 种修改方案都在 [ADMIN_PAGE_MODIFICATION_PLAN.md](ADMIN_PAGE_MODIFICATION_PLAN.md) 中。
-
-### Q: 如何验证修改是否正确?
-
-A: 在浏览器中访问页面,检查菜单是否显示和高亮。
-
----
-
-## 🚀 下一步
-
-1. ✅ **阅读总结** - 查看 [ADMIN_PAGE_INDEX.md](ADMIN_PAGE_INDEX.md)
-2. ✅ **选择目标** - 根据优先级选择要修改的文件
-3. ✅ **查找模板** - 在 [ADMIN_PAGE_MODIFICATION_PLAN.md](ADMIN_PAGE_MODIFICATION_PLAN.md) 中找到对应方案
-4. ✅ **应用修改** - 复制模板代码到你的文件
-5. ✅ **验证结果** - 在浏览器中测试
-
----
-
-## 📊 修改进度跟踪
-
-使用此清单跟踪修改进度:
-
-```
-□ 完成优先级低的 7 个文件
-□ 完成优先级中的 27 个文件
-□ 完成优先级高的 36 个文件
-□ 验证所有修改
-□ 运行测试
-□ 部署到生产环境
-```
-
----
-
-## 💬 反馈和改进
-
-如果你在修改过程中发现问题或有改进建议:
-
-- 查看所有生成的文档
-- 参考 [ADMIN_PAGE_QUICK_REFERENCE.md](ADMIN_PAGE_QUICK_REFERENCE.md) 的问题排查部分
-- 确保 AdminLayout 导入正确
-- 确保 currentPage 值与 menu.uts 中的 id 匹配
-
----
-
-## 📅 信息汇总
-
-- **检查日期**:2026年1月30日
-- **检查方法**:自动化代码分析
-- **准确度**:100%(基于代码检查)
-- **生成文档**:6 份
-- **包含路由**:76 条
-- **涉及文件**:50+ 个
-- **需要修改**:68 个
-
----
-
-## 🎯 最终建议
-
-**立即行动**:
-
-1. 打开 [ADMIN_PAGE_INDEX.md](ADMIN_PAGE_INDEX.md)
-2. 选择一个优先级低的文件开始
-3. 复制对应的修改模板
-4. 在浏览器中测试
-5. 逐个完成所有文件
-
-**预期收益**:
-
-- ✅ 统一的用户界面
-- ✅ 更好的用户体验
-- ✅ 更容易的代码维护
-- ✅ 更少的 BUG
-
----
-
-**准备好了?** 👉 [查看详细索引](ADMIN_PAGE_INDEX.md)
-
-_检查报告生成时间:2026年1月30日_
-_所有文档已在项目根目录生成_
diff --git a/mall/ADMIN_PAGE_COMPLIANCE_CHECKLIST.md b/mall/ADMIN_PAGE_COMPLIANCE_CHECKLIST.md
deleted file mode 100644
index 70b973c0..00000000
--- a/mall/ADMIN_PAGE_COMPLIANCE_CHECKLIST.md
+++ /dev/null
@@ -1,382 +0,0 @@
-# 后台页面 AdminLayout 包装检查清单
-
-本清单列出所有 menu.uts 中定义的路由对应的 uvue 文件,并标注其完整路径和包装状态。
-
-## 检查状态说明:
-
-- ✅ **完全符合**:已使用 AdminLayout 包装且有正确的 currentPage prop
-- ⚠️ **部分符合**:已使用 AdminLayout 但 currentPage prop 不正确或位置不对
-- ❌ **需要修改**:未使用 AdminLayout 或未添加 currentPage prop
-- 🔄 **需要优化**:currentPage 值为动态值而非静态值(需要验证)
-
----
-
-## 路由清单
-
-### 1. 首页
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | -------------------------------- | ----------- | ---------------------------------------------------------------------------- | ---- | ---------- |
-| 1 | /pages/mall/admin/homePage/index | home | [pages/mall/admin/homePage/index.uvue](pages/mall/admin/homePage/index.uvue) | ✅ | 已正确包装 |
-
----
-
-### 2. 用户管理
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | ----------------------------------------------- | ---------------- | ------------------------------------------------------------------------------ | ---- | ---------------------------------------------- |
-| 2 | /pages/mall/admin/user-statistics | user | [pages/mall/admin/user-statistics.uvue](pages/mall/admin/user-statistics.uvue) | ⚠️ | currentPage 在内层 view,应该在 AdminLayout 上 |
-| 3 | /pages/mall/admin/user-management | user-list (动态) | [pages/mall/admin/user-management.uvue](pages/mall/admin/user-management.uvue) | 🔄 | 使用动态 currentPage,根据 action 参数变化 |
-| 3.1 | /pages/mall/admin/user-management?action=group | user-group | [pages/mall/admin/user-management.uvue](pages/mall/admin/user-management.uvue) | 🔄 | 同上,动态值 |
-| 3.2 | /pages/mall/admin/user-management?action=tag | user-tag | [pages/mall/admin/user-management.uvue](pages/mall/admin/user-management.uvue) | 🔄 | 同上,动态值 |
-| 3.3 | /pages/mall/admin/user-management?action=level | user-level | [pages/mall/admin/user-management.uvue](pages/mall/admin/user-management.uvue) | 🔄 | 同上,动态值 |
-| 3.4 | /pages/mall/admin/user-management?action=config | user-config | [pages/mall/admin/user-management.uvue](pages/mall/admin/user-management.uvue) | 🔄 | 同上,动态值 |
-
----
-
-### 3. 订单管理
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | ------------------------------------------------ | --------------------- | -------------------------------------------------------------------------------- | ---- | -------------------------------------- |
-| 4 | /pages/mall/admin/order-management | order-list (tab=list) | [pages/mall/admin/order-management.uvue](pages/mall/admin/order-management.uvue) | ❌ | 未使用 AdminLayout,未添加 currentPage |
-| 4.1 | /pages/mall/admin/order-management?tab=stats | order-stats | [pages/mall/admin/order-management.uvue](pages/mall/admin/order-management.uvue) | ❌ | 需要处理 tab 参数 |
-| 4.2 | /pages/mall/admin/order-management?tab=list | order-list | [pages/mall/admin/order-management.uvue](pages/mall/admin/order-management.uvue) | ❌ | 需要处理 tab 参数 |
-| 4.3 | /pages/mall/admin/order-management?tab=aftersale | order-aftersale | [pages/mall/admin/order-management.uvue](pages/mall/admin/order-management.uvue) | ❌ | 需要处理 tab 参数 |
-| 4.4 | /pages/mall/admin/order-management?tab=cashier | order-cashier | [pages/mall/admin/order-management.uvue](pages/mall/admin/order-management.uvue) | ❌ | 需要处理 tab 参数 |
-| 4.5 | /pages/mall/admin/order-management?tab=verify | order-verify | [pages/mall/admin/order-management.uvue](pages/mall/admin/order-management.uvue) | ❌ | 需要处理 tab 参数 |
-| 4.6 | /pages/mall/admin/order-management?tab=config | order-config | [pages/mall/admin/order-management.uvue](pages/mall/admin/order-management.uvue) | ❌ | 需要处理 tab 参数 |
-
----
-
-### 4. 商品管理
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | ---------------------------------------- | ---------------------- | -------------------------------------------------------------------------------------------- | ---- | -------------------------------------- |
-| 5 | /pages/mall/admin/product-management | product-list | [pages/mall/admin/product-management.uvue](pages/mall/admin/product-management.uvue) | ❌ | 未使用 AdminLayout,未添加 currentPage |
-| 6 | /pages/mall/admin/product-statistics | product-statistics | [pages/mall/admin/product-statistics.uvue](pages/mall/admin/product-statistics.uvue) | ✅ | 已正确包装 |
-| 7 | /pages/mall/admin/product-classification | product-classification | [pages/mall/admin/product-classification.uvue](pages/mall/admin/product-classification.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 8 | /pages/mall/admin/product-specifications | product-specifications | [pages/mall/admin/product-specifications.uvue](pages/mall/admin/product-specifications.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 9 | /pages/mall/admin/product-parameters | product-parameters | [pages/mall/admin/product-parameters.uvue](pages/mall/admin/product-parameters.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 10 | /pages/mall/admin/product-labels | product-labels | [pages/mall/admin/product-labels.uvue](pages/mall/admin/product-labels.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 11 | /pages/mall/admin/product-protection | product-protection | [pages/mall/admin/product-protection.uvue](pages/mall/admin/product-protection.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 12 | /pages/mall/admin/product-reviews | product-reviews | [pages/mall/admin/product-reviews.uvue](pages/mall/admin/product-reviews.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-
----
-
-### 5. 设计
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | ------------------------------ | ----------- | ------------------------------------------------------------------------ | ---- | ------------------------------------------------------------------ |
-| 13 | /pages/mall/admin/design/index | design-home | [pages/mall/admin/design/index.uvue](pages/mall/admin/design/index.uvue) | ⚠️ | 属性名为 current-page(kebab-case),应为 currentPage(camelCase) |
-
----
-
-### 6. 文章管理
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | ------------------------------- | ------------ | -------------------------------------------------------------------------- | ---- | --------------------------------------- |
-| 14 | /pages/mall/admin/content/index | content-list | [pages/mall/admin/content/index.uvue](pages/mall/admin/content/index.uvue) | ❌ | 已使用 AdminLayout 但未添加 currentPage |
-
----
-
-### 7. 客服管理
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | --------------------------------------------- | ------------- | ------------------------------------------------------------------------------------------------------ | ---- | ------------------------------------------------------------------ |
-| 15 | /pages/mall/admin/customer-service/list | cs-list | [pages/mall/admin/customer-service/list.uvue](pages/mall/admin/customer-service/list.uvue) | ⚠️ | 属性名为 current-page(kebab-case),值为 'list'(应为 'cs-list') |
-| 16 | /pages/mall/admin/customer-service/script | cs-script | [pages/mall/admin/customer-service/script.uvue](pages/mall/admin/customer-service/script.uvue) | ❌ | 未使用 AdminLayout,未添加 currentPage |
-| 17 | /pages/mall/admin/customer-service/messages | cs-message | [pages/mall/admin/customer-service/messages.uvue](pages/mall/admin/customer-service/messages.uvue) | ❌ | 未使用 AdminLayout,未添加 currentPage |
-| 18 | /pages/mall/admin/customer-service/auto-reply | cs-auto-reply | [pages/mall/admin/customer-service/auto-reply.uvue](pages/mall/admin/customer-service/auto-reply.uvue) | ❌ | 未使用 AdminLayout,未添加 currentPage |
-| 19 | /pages/mall/admin/customer-service/config | cs-config | [pages/mall/admin/customer-service/config.uvue](pages/mall/admin/customer-service/config.uvue) | ❌ | 未使用 AdminLayout,未添加 currentPage |
-
----
-
-### 8. 营销管理
-
-#### 8.1 优惠券
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | ------------------------------------------ | -------------- | ------------------------------------------------------------------------------------------------ | ---- | -------------------------------------- |
-| 20 | /pages/mall/admin/marketing/coupon/list | coupon-list | [pages/mall/admin/marketing/coupon/list.uvue](pages/mall/admin/marketing/coupon/list.uvue) | ❌ | 未使用 AdminLayout,未添加 currentPage |
-| 21 | /pages/mall/admin/marketing/coupon/receive | coupon-receive | [pages/mall/admin/marketing/coupon/receive.uvue](pages/mall/admin/marketing/coupon/receive.uvue) | ❌ | 未使用 AdminLayout,未添加 currentPage |
-
-#### 8.2 积分、抽奖等(统一页面)
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ----- | ---------------------------------------- | ---------------- | -------------------------------------------------------------------------------------------- | ---- | -------------------------------------- |
-| 22-32 | /pages/mall/admin/marketing/points/index | 多个(根据 tab) | [pages/mall/admin/marketing/points/index.uvue](pages/mall/admin/marketing/points/index.uvue) | ❌ | 未使用 AdminLayout,未添加 currentPage |
-
-#### 8.3 签到
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | ----------------------------------------- | ------------- | ---------------------------------------------------------------------------------------------- | ---- | -------------------------------------- |
-| 33 | /pages/mall/admin/marketing/signin/rule | signin-rule | [pages/mall/admin/marketing/signin/rule.uvue](pages/mall/admin/marketing/signin/rule.uvue) | ❌ | 未使用 AdminLayout,未添加 currentPage |
-| 34 | /pages/mall/admin/marketing/signin/record | signin-record | [pages/mall/admin/marketing/signin/record.uvue](pages/mall/admin/marketing/signin/record.uvue) | ❌ | 未使用 AdminLayout,未添加 currentPage |
-
----
-
-### 9. 系统设置
-
-#### 9.1 基础设置
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | --------------------------------- | ----------- | ------------------------------------------------------------------------------ | ---- | --------------------------------------- |
-| 35 | /pages/mall/admin/system-settings | sys-basic | [pages/mall/admin/system-settings.uvue](pages/mall/admin/system-settings.uvue) | ⚠️ | 已使用 AdminLayout 但未添加 currentPage |
-
-#### 9.2 消息管理
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | ------------------------------------------- | ----------- | -------------------------------------------------------------------------------------------------- | ---- | ----------------------------------- |
-| 36 | /pages/mall/admin/system/message-management | sys-message | [pages/mall/admin/system/message-management.uvue](pages/mall/admin/system/message-management.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-
-#### 9.3 协议设置
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | ------------------------------------------- | ------------- | -------------------------------------------------------------------------------------------------- | ---- | ----------------------------------- |
-| 37 | /pages/mall/admin/system/agreement-settings | sys-agreement | [pages/mall/admin/system/agreement-settings.uvue](pages/mall/admin/system/agreement-settings.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-
-#### 9.4 小票配置
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | ----------------------------------------- | ----------- | ---------------------------------------------------------------------------------------------- | ---- | ----------------------------------- |
-| 38 | /pages/mall/admin/system/receipt-settings | sys-receipt | [pages/mall/admin/system/receipt-settings.uvue](pages/mall/admin/system/receipt-settings.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-
-#### 9.5 权限管理
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | ------------------------------------------------------ | ---------------- | ------------------------------------------------------------------------------------------------------------------------ | ---- | ----------------------------------- |
-| 39 | /pages/mall/admin/system/permission/role | sys-role | [pages/mall/admin/system/permission/role.uvue](pages/mall/admin/system/permission/role.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 40 | /pages/mall/admin/system/permission/admin-list | sys-admin | [pages/mall/admin/system/permission/admin-list.uvue](pages/mall/admin/system/permission/admin-list.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 41 | /pages/mall/admin/system/permission/permission-setting | sys-perm-setting | [pages/mall/admin/system/permission/permission-setting.uvue](pages/mall/admin/system/permission/permission-setting.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-
-#### 9.6 发货设置
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | -------------------------------------------------- | --------------- | ---------------------------------------------------------------------------------------------------------------- | ---- | -------------------------------------- |
-| 42 | /pages/mall/admin/system/shipping/courier | ship-courier | [pages/mall/admin/system/shipping/courier.uvue](pages/mall/admin/system/shipping/courier.uvue) | ❌ | 未使用 AdminLayout,未添加 currentPage |
-| 43 | /pages/mall/admin/system/shipping/pickup/points | pickup-points | [pages/mall/admin/system/shipping/pickup/points.uvue](pages/mall/admin/system/shipping/pickup/points.uvue) | ❌ | 未使用 AdminLayout,未添加 currentPage |
-| 44 | /pages/mall/admin/system/shipping/pickup/verifiers | pickup-verifier | [pages/mall/admin/system/shipping/pickup/verifiers.uvue](pages/mall/admin/system/shipping/pickup/verifiers.uvue) | ❌ | 未使用 AdminLayout,未添加 currentPage |
-| 45 | /pages/mall/admin/system/shipping/freight-template | ship-freight | [pages/mall/admin/system/shipping/freight-template.uvue](pages/mall/admin/system/shipping/freight-template.uvue) | ❌ | 未使用 AdminLayout,未添加 currentPage |
-
-#### 9.7 接口配置
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | --------------------------------------- | -------------- | ------------------------------------------------------------------------------------------ | ---- | ----------------------------------- |
-| 46 | /pages/mall/admin/system/api/yht/page | api-yht-page | [pages/mall/admin/system/api/yht/page.uvue](pages/mall/admin/system/api/yht/page.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 47 | /pages/mall/admin/system/api/yht/config | api-yht-config | [pages/mall/admin/system/api/yht/config.uvue](pages/mall/admin/system/api/yht/config.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 48 | /pages/mall/admin/system/api/storage | api-storage | [pages/mall/admin/system/api/storage.uvue](pages/mall/admin/system/api/storage.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 49 | /pages/mall/admin/system/api/collect | api-collect | [pages/mall/admin/system/api/collect.uvue](pages/mall/admin/system/api/collect.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 50 | /pages/mall/admin/system/api/logistics | api-logistics | [pages/mall/admin/system/api/logistics.uvue](pages/mall/admin/system/api/logistics.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 51 | /pages/mall/admin/system/api/waybill | api-waybill | [pages/mall/admin/system/api/waybill.uvue](pages/mall/admin/system/api/waybill.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 52 | /pages/mall/admin/system/api/sms | api-sms | [pages/mall/admin/system/api/sms.uvue](pages/mall/admin/system/api/sms.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 53 | /pages/mall/admin/system/api/pay | api-pay | [pages/mall/admin/system/api/pay.uvue](pages/mall/admin/system/api/pay.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-
----
-
-### 10. 维护管理
-
-#### 10.1 开发配置
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | ------------------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------------------------------------ | ---- | --------------------------------------- |
-| 54 | /pages/mall/admin/maintain/dev-config/category | dev-config-category | [pages/mall/admin/maintain/dev-config/category.uvue](pages/mall/admin/maintain/dev-config/category.uvue) | ⚠️ | 已使用 AdminLayout 但未添加 currentPage |
-| 55 | /pages/mall/admin/maintain/dev-config/combination-data | dev-config-combo | [pages/mall/admin/maintain/dev-config/combination-data.uvue](pages/mall/admin/maintain/dev-config/combination-data.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 56 | /pages/mall/admin/maintain/dev-config/cron-job | dev-config-cron | [pages/mall/admin/maintain/dev-config/cron-job.uvue](pages/mall/admin/maintain/dev-config/cron-job.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 57 | /pages/mall/admin/maintain/dev-config/permission | dev-config-permission | [pages/mall/admin/maintain/dev-config/permission.uvue](pages/mall/admin/maintain/dev-config/permission.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 58 | /pages/mall/admin/maintain/dev-config/module-config | dev-config-module | [pages/mall/admin/maintain/dev-config/module-config.uvue](pages/mall/admin/maintain/dev-config/module-config.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 59 | /pages/mall/admin/maintain/dev-config/custom-event | dev-config-event | [pages/mall/admin/maintain/dev-config/custom-event.uvue](pages/mall/admin/maintain/dev-config/custom-event.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-
-#### 10.2 安全维护
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | -------------------------------------------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------- | ---- | ----------------------------------- |
-| 60 | /pages/mall/admin/maintain/security/refresh-cache | security-refresh-cache | [pages/mall/admin/maintain/security/refresh-cache.uvue](pages/mall/admin/maintain/security/refresh-cache.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 61 | /pages/mall/admin/maintain/security/system-log | security-system-log | [pages/mall/admin/maintain/security/system-log.uvue](pages/mall/admin/maintain/security/system-log.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 62 | /pages/mall/admin/maintain/security/online-upgrade | security-online-upgrade | [pages/mall/admin/maintain/security/online-upgrade.uvue](pages/mall/admin/maintain/security/online-upgrade.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-
-#### 10.3 数据维护
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | ------------------------------------------------- | ---------------------- | -------------------------------------------------------------------------------------------------------------- | ---- | ----------------------------------- |
-| 63 | /pages/mall/admin/maintain/data/logistics-company | data-logistics-company | [pages/mall/admin/maintain/data/logistics-company.uvue](pages/mall/admin/maintain/data/logistics-company.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 64 | /pages/mall/admin/maintain/data/city-data | data-city-data | [pages/mall/admin/maintain/data/city-data.uvue](pages/mall/admin/maintain/data/city-data.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 65 | /pages/mall/admin/maintain/data/clear-data | data-clear-data | [pages/mall/admin/maintain/data/clear-data.uvue](pages/mall/admin/maintain/data/clear-data.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-
-#### 10.4 对外接口
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | ------------------------------------------- | ---------------- | -------------------------------------------------------------------------------------------------- | ---- | -------------------------------------- |
-| 66 | /pages/mall/admin/maintain/external/account | external-account | [pages/mall/admin/maintain/external/account.uvue](pages/mall/admin/maintain/external/account.uvue) | ❌ | 未使用 AdminLayout,未添加 currentPage |
-
-#### 10.5 语言设置
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | ------------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------------------------ | ---- | ----------------------------------- |
-| 67 | /pages/mall/admin/maintain/i18n/language-list | i18n-language-list | [pages/mall/admin/maintain/i18n/language-list.uvue](pages/mall/admin/maintain/i18n/language-list.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 68 | /pages/mall/admin/maintain/i18n/language-detail | i18n-language-detail | [pages/mall/admin/maintain/i18n/language-detail.uvue](pages/mall/admin/maintain/i18n/language-detail.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 69 | /pages/mall/admin/maintain/i18n/region-list | i18n-region-list | [pages/mall/admin/maintain/i18n/region-list.uvue](pages/mall/admin/maintain/i18n/region-list.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 70 | /pages/mall/admin/maintain/i18n/translate-config | i18n-translate-config | [pages/mall/admin/maintain/i18n/translate-config.uvue](pages/mall/admin/maintain/i18n/translate-config.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-
-#### 10.6 开发工具
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | ---------------------------------------------- | ----------------- | -------------------------------------------------------------------------------------------------------- | ---- | ----------------------------------- |
-| 71 | /pages/mall/admin/maintain/dev-tools/database | dev-tools-db | [pages/mall/admin/maintain/dev-tools/database.uvue](pages/mall/admin/maintain/dev-tools/database.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 72 | /pages/mall/admin/maintain/dev-tools/file | dev-tools-file | [pages/mall/admin/maintain/dev-tools/file.uvue](pages/mall/admin/maintain/dev-tools/file.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 73 | /pages/mall/admin/maintain/dev-tools/api | dev-tools-api | [pages/mall/admin/maintain/dev-tools/api.uvue](pages/mall/admin/maintain/dev-tools/api.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 74 | /pages/mall/admin/maintain/dev-tools/codegen | dev-tools-codegen | [pages/mall/admin/maintain/dev-tools/codegen.uvue](pages/mall/admin/maintain/dev-tools/codegen.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-| 75 | /pages/mall/admin/maintain/dev-tools/data-dict | dev-tools-dict | [pages/mall/admin/maintain/dev-tools/data-dict.uvue](pages/mall/admin/maintain/dev-tools/data-dict.uvue) | ❌ | 已导入 AdminLayout 但未在模板中使用 |
-
-#### 10.7 系统信息
-
-| 序号 | 路由 | currentPage | 文件路径 | 状态 | 说明 |
-| ---- | -------------------------------------- | ----------- | ---------------------------------------------------------------------------------------- | ---- | --------------------------------------- |
-| 76 | /pages/mall/admin/maintain/system-info | system-info | [pages/mall/admin/maintain/system-info.uvue](pages/mall/admin/maintain/system-info.uvue) | ⚠️ | 已使用 AdminLayout 但未添加 currentPage |
-
----
-
-## 统计汇总
-
-| 状态 | 数量 | 百分比 |
-| ----------- | ------ | -------- |
-| ✅ 完全符合 | 2 | 2.6% |
-| ⚠️ 部分符合 | 6 | 7.9% |
-| 🔄 需要优化 | 5 | 6.6% |
-| ❌ 需要修改 | 63 | 82.9% |
-| **总计** | **76** | **100%** |
-
----
-
-## 需要修改的文件分类
-
-### 类别 A:已导入但未在模板中使用(需要包装)- 27 个文件
-
-```
-pages/mall/admin/product-classification.uvue
-pages/mall/admin/product-specifications.uvue
-pages/mall/admin/product-parameters.uvue
-pages/mall/admin/product-labels.uvue
-pages/mall/admin/product-protection.uvue
-pages/mall/admin/product-reviews.uvue
-pages/mall/admin/system/message-management.uvue
-pages/mall/admin/system/agreement-settings.uvue
-pages/mall/admin/system/receipt-settings.uvue
-pages/mall/admin/system/permission/role.uvue
-pages/mall/admin/system/permission/admin-list.uvue
-pages/mall/admin/system/permission/permission-setting.uvue
-pages/mall/admin/system/api/yht/page.uvue
-pages/mall/admin/system/api/yht/config.uvue
-pages/mall/admin/system/api/storage.uvue
-pages/mall/admin/system/api/collect.uvue
-pages/mall/admin/system/api/logistics.uvue
-pages/mall/admin/system/api/waybill.uvue
-pages/mall/admin/system/api/sms.uvue
-pages/mall/admin/system/api/pay.uvue
-pages/mall/admin/maintain/dev-config/combination-data.uvue
-pages/mall/admin/maintain/dev-config/cron-job.uvue
-pages/mall/admin/maintain/dev-config/permission.uvue
-pages/mall/admin/maintain/dev-config/module-config.uvue
-pages/mall/admin/maintain/dev-config/custom-event.uvue
-pages/mall/admin/maintain/security/refresh-cache.uvue
-pages/mall/admin/maintain/security/system-log.uvue
-```
-
-### 类别 B:未使用 AdminLayout(需要完全重新包装)- 36 个文件
-
-```
-pages/mall/admin/product-management.uvue
-pages/mall/admin/order-management.uvue
-pages/mall/admin/marketing/coupon/list.uvue
-pages/mall/admin/marketing/coupon/receive.uvue
-pages/mall/admin/marketing/points/index.uvue
-pages/mall/admin/marketing/signin/rule.uvue
-pages/mall/admin/marketing/signin/record.uvue
-pages/mall/admin/system/shipping/courier.uvue
-pages/mall/admin/system/shipping/pickup/points.uvue
-pages/mall/admin/system/shipping/pickup/verifiers.uvue
-pages/mall/admin/system/shipping/freight-template.uvue
-pages/mall/admin/customer-service/script.uvue
-pages/mall/admin/customer-service/messages.uvue
-pages/mall/admin/customer-service/auto-reply.uvue
-pages/mall/admin/customer-service/config.uvue
-pages/mall/admin/maintain/data/logistics-company.uvue
-pages/mall/admin/maintain/data/city-data.uvue
-pages/mall/admin/maintain/data/clear-data.uvue
-pages/mall/admin/maintain/external/account.uvue
-pages/mall/admin/maintain/i18n/language-list.uvue
-pages/mall/admin/maintain/i18n/language-detail.uvue
-pages/mall/admin/maintain/i18n/region-list.uvue
-pages/mall/admin/maintain/i18n/translate-config.uvue
-pages/mall/admin/maintain/dev-tools/database.uvue
-pages/mall/admin/maintain/dev-tools/file.uvue
-pages/mall/admin/maintain/dev-tools/api.uvue
-pages/mall/admin/maintain/dev-tools/codegen.uvue
-pages/mall/admin/maintain/dev-tools/data-dict.uvue
-```
-
-### 类别 C:需要修复 currentPage 或属性名 - 10 个文件
-
-```
-pages/mall/admin/user-statistics.uvue (currentPage 在内层 view)
-pages/mall/admin/design/index.uvue (属性名应为 currentPage 而非 current-page, 值应为 design-home)
-pages/mall/admin/content/index.uvue (缺少 currentPage)
-pages/mall/admin/customer-service/list.uvue (属性名应为 currentPage,值应为 cs-list)
-pages/mall/admin/system-settings.uvue (缺少 currentPage)
-pages/mall/admin/maintain/dev-config/category.uvue (缺少 currentPage)
-pages/mall/admin/maintain/system-info.uvue (缺少 currentPage)
-```
-
-### 类别 D:动态 currentPage(已可接受但需验证)- 5 个文件
-
-```
-pages/mall/admin/user-management.uvue (使用 :currentPage="currentPage",根据 action 参数动态变化)
-```
-
----
-
-## 推荐修改优先级
-
-### 优先级 1(必须修改,影响导航)
-
-1. 所有完全缺少 AdminLayout 的文件(类别 B)
-2. currentPage 值错误的文件(如 customer-service/list.uvue)
-
-### 优先级 2(应该修改,影响主题和导航状态)
-
-1. 已导入但未使用 AdminLayout 的文件(类别 A)
-2. currentPage 属性名错误的文件(使用 current-page 而非 currentPage)
-
-### 优先级 3(可选,增强用户体验)
-
-1. 验证所有动态 currentPage 的实现正确性
-
----
-
-## 修改建议
-
-每个页面应该遵循以下模板:
-
-```uvue
-
-
-
-
-
-
-
-```
-
----
-
-_文档生成时间:2026年1月30日_
diff --git a/mall/ADMIN_PAGE_INDEX.md b/mall/ADMIN_PAGE_INDEX.md
deleted file mode 100644
index b4cfba5e..00000000
--- a/mall/ADMIN_PAGE_INDEX.md
+++ /dev/null
@@ -1,354 +0,0 @@
-# 后台页面检查 - 文档索引
-
-👉 **请从本文档开始查阅**
-
----
-
-## 📚 四大文档导航
-
-### 1️⃣ **执行总结** ⭐ 必读
-
-📄 **文件**:[ADMIN_PAGE_SUMMARY.md](ADMIN_PAGE_SUMMARY.md)
-
-**适合**:快速了解整体情况
-**包含内容**:
-
-- 检查结果统计(2 个完全符合,74 个需要修改)
-- 关键发现和问题分类
-- 需要修改的文件列表(按优先级)
-- 修改方案建议
-- 后续步骤
-
-**阅读时间**:5-10 分钟
-
----
-
-### 2️⃣ **完整清单** ⭐ 参考
-
-📄 **文件**:[ADMIN_PAGE_COMPLIANCE_CHECKLIST.md](ADMIN_PAGE_COMPLIANCE_CHECKLIST.md)
-
-**适合**:查看每个路由的完整详情
-**包含内容**:
-
-- 66 条路由(76 个变体)的完整清单
-- 每个路由的文件路径、状态、说明
-- 按模块组织(用户、订单、商品等)
-- 统计汇总(按状态分类)
-- 需要修改的文件分类
-
-**查阅方式**:
-
-- 如果你想知道某个路由的对应文件:直接查表
-- 如果你想看某个模块的所有文件:按模块查看
-- 如果你想找到所有错误的文件:查看"需要修改的文件分类"
-
-**阅读时间**:15-20 分钟
-
----
-
-### 3️⃣ **修改计划** ⭐ 执行
-
-📄 **文件**:[ADMIN_PAGE_MODIFICATION_PLAN.md](ADMIN_PAGE_MODIFICATION_PLAN.md)
-
-**适合**:开始修改文件
-**包含内容**:
-
-- 6 种修改方案(附代码示例)
-- 所有需要修改的文件详细分类
-- 每个文件的具体修改说明
-- 修改优先级建议
-- 实施建议和时间估计
-
-**查阅方式**:
-
-- 找到你要修改的文件
-- 根据它属于哪一类(A/B/C/D/E/F),使用对应的修改模板
-- 应用修改
-
-**阅读时间**:20-30 分钟(第一次),5-10 分钟(查询具体文件)
-
----
-
-### 4️⃣ **快速参考** ⭐ 速查
-
-📄 **文件**:[ADMIN_PAGE_QUICK_REFERENCE.md](ADMIN_PAGE_QUICK_REFERENCE.md)
-
-**适合**:快速查找某个文件的修改方案
-**包含内容**:
-
-- 整体统计(一览表)
-- 已完全符合的文件(2 个)
-- 部分符合的文件(需要小修改)
-- 需要完全重新包装的文件(36 个)
-- 已导入但未使用的文件(27 个)
-- 快速修改命令指南
-- 重要提示和常见问题
-
-**查阅方式**:
-
-- 按文件名搜索(Ctrl+F)
-- 查看相应状态分类
-- 看修改建议
-
-**阅读时间**:5-15 分钟
-
----
-
-## 🚀 快速开始
-
-### 第一步:了解情况(5 分钟)
-
-1. 阅读本文档(索引)
-2. 查阅 [ADMIN_PAGE_SUMMARY.md](ADMIN_PAGE_SUMMARY.md) 的前半部分
-
-### 第二步:选择修改目标(5 分钟)
-
-1. 查看 [ADMIN_PAGE_SUMMARY.md](ADMIN_PAGE_SUMMARY.md) 的"需要修改的文件列表"
-2. 根据优先级选择要修改的文件
-3. 推荐顺序:🟢 低 → 🟡 中 → 🔴 高
-
-### 第三步:执行修改(因文件数而异)
-
-1. 打开 [ADMIN_PAGE_MODIFICATION_PLAN.md](ADMIN_PAGE_MODIFICATION_PLAN.md)
-2. 找到对应的修改方案
-3. 复制模板代码
-4. 应用到你的文件
-
-### 第四步:验证(每个文件 1-2 分钟)
-
-1. 在浏览器中访问修改后的页面
-2. 检查导航菜单是否显示
-3. 检查当前页面是否高亮
-
----
-
-## 📊 统计一览
-
-| 指标 | 数值 |
-| ------------ | -------------- |
-| 检查的路由数 | 76 条 |
-| 涉及的文件数 | 50+ 个 |
-| 完全符合 | 2 个(2.6%) |
-| 部分符合 | 6 个(7.9%) |
-| 需要修改 | 68 个(89.5%) |
-| 预计修改时间 | 13-20 小时 |
-
----
-
-## 🎯 按优先级的快速导航
-
-### 🔴 优先级 1 - 高(必须修改 - 36 个文件)
-
-**查看**:[ADMIN_PAGE_SUMMARY.md - 优先级 🔴 高](ADMIN_PAGE_SUMMARY.md#优先级-🔴-高必须立即修改36个文件)
-
-这些页面完全没有 AdminLayout,无法正常显示。
-
-**主要文件**:
-
-- product-management.uvue
-- order-management.uvue
-- 所有 marketing/coupon/\*.uvue
-- 所有 customer-service/\*.uvue
-- 等等
-
-**预计时间**:8-12 小时
-
----
-
-### 🟡 优先级 2 - 中(应该修改 - 27 个文件)
-
-**查看**:[ADMIN_PAGE_SUMMARY.md - 优先级 🟡 中](ADMIN_PAGE_SUMMARY.md#优先级-🟡-中应该修改27个文件)
-
-这些页面已导入 AdminLayout 但没有在模板中使用。
-
-**主要文件**:
-
-- 所有 product/\*.uvue(除 product-statistics.uvue)
-- 所有 system/api/\*.uvue
-- 所有 maintain/dev-config/\*.uvue
-- 等等
-
-**预计时间**:4-6 小时
-
----
-
-### 🟢 优先级 3 - 低(小修改 - 7 个文件)
-
-**查看**:[ADMIN_PAGE_SUMMARY.md - 优先级 🟢 低](ADMIN_PAGE_SUMMARY.md#优先级-🟢-低小修改7个文件)
-
-这些页面只需要小的调整(属性名、值或添加 prop)。
-
-**主要文件**:
-
-- design/index.uvue
-- user-statistics.uvue
-- content/index.uvue
-- 等等
-
-**预计时间**:1-2 小时
-
----
-
-## 🔍 按问题类型的导航
-
-### 问题 1:完全缺少 AdminLayout(36 个文件)
-
-**对应文档**:[ADMIN_PAGE_MODIFICATION_PLAN.md - 方案 1](ADMIN_PAGE_MODIFICATION_PLAN.md#方案-1完全包装类别-b---36个文件)
-
-修改模板在文档中明确给出。
-
----
-
-### 问题 2:已导入但未使用(27 个文件)
-
-**对应文档**:[ADMIN_PAGE_MODIFICATION_PLAN.md - 方案 2](ADMIN_PAGE_MODIFICATION_PLAN.md#方案-2使用已导入的-adminlayout类别-a---27个文件)
-
-这是最容易修改的,只需在模板中使用 AdminLayout。
-
----
-
-### 问题 3:属性名或值错误(7 个文件)
-
-**对应文档**:[ADMIN_PAGE_MODIFICATION_PLAN.md - 方案 3 和 4](ADMIN_PAGE_MODIFICATION_PLAN.md#方案-3修复属性名和值类别-c-的属性名问题)
-
-具体修改建议对每个文件都有说明。
-
----
-
-### 问题 4:多标签页需要动态 currentPage(3 个文件)
-
-**对应文档**:[ADMIN_PAGE_MODIFICATION_PLAN.md - 方案 6](ADMIN_PAGE_MODIFICATION_PLAN.md#方案-6处理多-tab-页面order-managementuvuemarketing-points-indexuvue)
-
-参考 user-management.uvue 的实现方式。
-
----
-
-## 📁 所有生成的文档
-
-```
-mall/
-├── ADMIN_PAGE_SUMMARY.md ⭐
-│ └── 执行总结,包含所有关键信息
-│
-├── ADMIN_PAGE_COMPLIANCE_CHECKLIST.md ⭐
-│ └── 完整清单,66 条路由的详细列表
-│
-├── ADMIN_PAGE_MODIFICATION_PLAN.md ⭐
-│ └── 修改计划,包含 6 种修改方案和模板
-│
-├── ADMIN_PAGE_QUICK_REFERENCE.md ⭐
-│ └── 快速参考,快速查找和修改指南
-│
-└── ADMIN_PAGE_INDEX.md (本文档)
- └── 文档索引和导航
-```
-
----
-
-## 💡 使用建议
-
-### 如果你是项目经理
-
-→ 阅读 [ADMIN_PAGE_SUMMARY.md](ADMIN_PAGE_SUMMARY.md) 的前 3 部分
-
-### 如果你是开发人员需要修改某个文件
-
-→ 使用 Ctrl+F 在 [ADMIN_PAGE_QUICK_REFERENCE.md](ADMIN_PAGE_QUICK_REFERENCE.md) 中搜索文件名
-
-### 如果你需要完整的文件列表
-
-→ 查阅 [ADMIN_PAGE_COMPLIANCE_CHECKLIST.md](ADMIN_PAGE_COMPLIANCE_CHECKLIST.md)
-
-### 如果你需要了解修改方法
-
-→ 查看 [ADMIN_PAGE_MODIFICATION_PLAN.md](ADMIN_PAGE_MODIFICATION_PLAN.md)
-
-### 如果你不确定从哪里开始
-
-→ 阅读本文档(ADMIN_PAGE_INDEX.md),然后按优先级开始修改
-
----
-
-## ❓ 常见问题(FAQ)
-
-### Q: 有多少个文件需要修改?
-
-A: 总共 68 个文件需要修改(76 个路由变体)
-
-### Q: 修改需要多长时间?
-
-A: 大约 13-20 小时,取决于开发效率
-
-### Q: 最容易修改的是哪些?
-
-A: 优先级低的 7 个文件,只需要小的调整
-
-### Q: 应该从哪里开始?
-
-A: 建议从优先级低的文件开始(速度快,获得成就感)
-
-### Q: 修改模板在哪里?
-
-A: 在 [ADMIN_PAGE_MODIFICATION_PLAN.md](ADMIN_PAGE_MODIFICATION_PLAN.md) 中
-
-### Q: 如何验证修改是否正确?
-
-A: 查看本文档下方的"验证方法"部分
-
-### Q: 如果遇到问题怎么办?
-
-A: 查看本文档的"问题排查"部分,或查看 [ADMIN_PAGE_SUMMARY.md](ADMIN_PAGE_SUMMARY.md) 的排查指南
-
----
-
-## ✅ 检查清单
-
-在开始修改前,请确保:
-
-- [ ] 你已阅读 [ADMIN_PAGE_SUMMARY.md](ADMIN_PAGE_SUMMARY.md)
-- [ ] 你理解了不同优先级的差别
-- [ ] 你知道你要修改哪个文件
-- [ ] 你找到了对应的修改方案
-- [ ] 你已准备好修改工具(VS Code 等)
-
----
-
-## 🎓 学习资源
-
-### 相关文件
-
-- `layouts/admin/AdminLayout.uvue` - AdminLayout 组件定义
-- `layouts/admin/utils/menu.uts` - 导航菜单定义(包含所有 currentPage 值)
-- `layouts/admin/types.uts` - 类型定义
-
-### 参考页面(已正确实现)
-
-- `pages/mall/admin/homePage/index.uvue` ✅
-- `pages/mall/admin/product-statistics.uvue` ✅
-- `pages/mall/admin/user-management.uvue` ✅(动态实现)
-
----
-
-## 📞 相关信息
-
-- **检查日期**:2026年1月30日
-- **检查方法**:自动化代码分析
-- **准确度**:100%(基于代码检查)
-- **文档语言**:中文
-
----
-
-## 🎉 预期结果
-
-修改完成后:
-
-- ✅ 所有后台页面都会显示 AdminLayout(导航、菜单、布局)
-- ✅ 用户导航到任何页面时都能看到正确的菜单高亮
-- ✅ 所有页面都有统一的外观和行为
-- ✅ 改善用户体验和代码的一致性
-
----
-
-**准备好开始?** 👉 [查看执行总结](ADMIN_PAGE_SUMMARY.md)
-
-_最后更新:2026年1月30日_
diff --git a/mall/ADMIN_PAGE_MODIFICATION_PLAN.md b/mall/ADMIN_PAGE_MODIFICATION_PLAN.md
deleted file mode 100644
index ad3d1b57..00000000
--- a/mall/ADMIN_PAGE_MODIFICATION_PLAN.md
+++ /dev/null
@@ -1,407 +0,0 @@
-# 后台页面 AdminLayout 包装修改计划
-
-本文档详细说明需要修改的所有文件及具体修改方案。
-
-## 修改方案概览
-
-### 方案 1:完全包装(类别 B - 36个文件)
-
-**问题**:完全没有使用 AdminLayout 包装
-**解决**:使用 AdminLayout 包装整个页面内容,并添加正确的 currentPage prop
-
-**修改模板**:
-
-```uvue
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-```
-
----
-
-### 方案 2:使用已导入的 AdminLayout(类别 A - 27个文件)
-
-**问题**:已经导入 AdminLayout,但在模板中没有使用
-**解决**:在模板中使用 AdminLayout 包装,并添加 currentPage prop
-
-**修改模板**:
-
-```uvue
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-```
-
----
-
-### 方案 3:修复属性名和值(类别 C 的属性名问题)
-
-**问题**:使用 `current-page` (kebab-case)而非 `currentPage` (camelCase),或值不正确
-**解决**:使用正确的属性名和值
-
-**修改示例 - design/index.uvue**:
-
-```uvue
-
-
-
-
-
-```
-
-**修改示例 - customer-service/list.uvue**:
-
-```uvue
-
-
-
-
-
-```
-
----
-
-### 方案 4:修复内层 currentPage(类别 C 的位置问题)
-
-**问题**:currentPage 被放在了内层 view 上,而非 AdminLayout 上
-**解决**:将 currentPage 移到 AdminLayout 组件上
-
-**修改示例 - user-statistics.uvue**:
-
-```uvue
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-```
-
----
-
-### 方案 5:动态 currentPage(类别 D - user-management.uvue)
-
-**现状**:已正确使用动态 currentPage,根据路由查询参数动态变化
-**行动**:验证实现正确性,无需修改
-
-```uvue
-
-
-
-
-
-
-
-```
-
----
-
-### 方案 6:处理多 tab 页面(order-management.uvue、marketing/points/index.uvue)
-
-**问题**:页面根据 tab 查询参数显示不同内容,需要动态设置 currentPage
-**解决**:根据 tab 参数动态设置 currentPage
-
-**修改示例 - order-management.uvue**:
-
-```uvue
-
-
-
-
-
-
-
-
-
-```
-
----
-
-## 需要修改的文件详细清单
-
-### 【类别 A】已导入但未在模板中使用(27个文件)
-
-需要在模板中使用 AdminLayout 包装,并添加 currentPage prop。
-
-#### 商品管理(6个文件)
-
-1. `pages/mall/admin/product-classification.uvue` → currentPage: `product-classification`
-2. `pages/mall/admin/product-specifications.uvue` → currentPage: `product-specifications`
-3. `pages/mall/admin/product-parameters.uvue` → currentPage: `product-parameters`
-4. `pages/mall/admin/product-labels.uvue` → currentPage: `product-labels`
-5. `pages/mall/admin/product-protection.uvue` → currentPage: `product-protection`
-6. `pages/mall/admin/product-reviews.uvue` → currentPage: `product-reviews`
-
-#### 系统设置(8个文件)
-
-7. `pages/mall/admin/system/message-management.uvue` → currentPage: `sys-message`
-8. `pages/mall/admin/system/agreement-settings.uvue` → currentPage: `sys-agreement`
-9. `pages/mall/admin/system/receipt-settings.uvue` → currentPage: `sys-receipt`
-10. `pages/mall/admin/system/permission/role.uvue` → currentPage: `sys-role`
-11. `pages/mall/admin/system/permission/admin-list.uvue` → currentPage: `sys-admin`
-12. `pages/mall/admin/system/permission/permission-setting.uvue` → currentPage: `sys-perm-setting`
-13. `pages/mall/admin/system/api/yht/page.uvue` → currentPage: `api-yht-page`
-14. `pages/mall/admin/system/api/yht/config.uvue` → currentPage: `api-yht-config`
-
-#### 系统 API 配置(6个文件)
-
-15. `pages/mall/admin/system/api/storage.uvue` → currentPage: `api-storage`
-16. `pages/mall/admin/system/api/collect.uvue` → currentPage: `api-collect`
-17. `pages/mall/admin/system/api/logistics.uvue` → currentPage: `api-logistics`
-18. `pages/mall/admin/system/api/waybill.uvue` → currentPage: `api-waybill`
-19. `pages/mall/admin/system/api/sms.uvue` → currentPage: `api-sms`
-20. `pages/mall/admin/system/api/pay.uvue` → currentPage: `api-pay`
-
-#### 维护管理 - 开发配置(5个文件)
-
-21. `pages/mall/admin/maintain/dev-config/combination-data.uvue` → currentPage: `dev-config-combo`
-22. `pages/mall/admin/maintain/dev-config/cron-job.uvue` → currentPage: `dev-config-cron`
-23. `pages/mall/admin/maintain/dev-config/permission.uvue` → currentPage: `dev-config-permission`
-24. `pages/mall/admin/maintain/dev-config/module-config.uvue` → currentPage: `dev-config-module`
-25. `pages/mall/admin/maintain/dev-config/custom-event.uvue` → currentPage: `dev-config-event`
-
-#### 维护管理 - 安全维护(3个文件)
-
-26. `pages/mall/admin/maintain/security/refresh-cache.uvue` → currentPage: `security-refresh-cache`
-27. `pages/mall/admin/maintain/security/system-log.uvue` → currentPage: `security-system-log`
-28. `pages/mall/admin/maintain/security/online-upgrade.uvue` → currentPage: `security-online-upgrade`
-
----
-
-### 【类别 B】完全未使用 AdminLayout(36个文件)
-
-需要完全重新包装和导入,并添加 currentPage prop。
-
-#### 商品与订单管理(2个文件)
-
-1. `pages/mall/admin/product-management.uvue` → currentPage: `product-list`
-2. `pages/mall/admin/order-management.uvue` → currentPage: 根据 tab 参数动态设置
-
-#### 营销管理(7个文件)
-
-3. `pages/mall/admin/marketing/coupon/list.uvue` → currentPage: `coupon-list`
-4. `pages/mall/admin/marketing/coupon/receive.uvue` → currentPage: `coupon-receive`
-5. `pages/mall/admin/marketing/points/index.uvue` → currentPage: 根据 tab 参数动态设置
-6. `pages/mall/admin/marketing/signin/rule.uvue` → currentPage: `signin-rule`
-7. `pages/mall/admin/marketing/signin/record.uvue` → currentPage: `signin-record`
-
-#### 客服管理(4个文件)
-
-8. `pages/mall/admin/customer-service/script.uvue` → currentPage: `cs-script`
-9. `pages/mall/admin/customer-service/messages.uvue` → currentPage: `cs-message`
-10. `pages/mall/admin/customer-service/auto-reply.uvue` → currentPage: `cs-auto-reply`
-11. `pages/mall/admin/customer-service/config.uvue` → currentPage: `cs-config`
-
-#### 系统 - 发货设置(4个文件)
-
-12. `pages/mall/admin/system/shipping/courier.uvue` → currentPage: `ship-courier`
-13. `pages/mall/admin/system/shipping/pickup/points.uvue` → currentPage: `pickup-points`
-14. `pages/mall/admin/system/shipping/pickup/verifiers.uvue` → currentPage: `pickup-verifier`
-15. `pages/mall/admin/system/shipping/freight-template.uvue` → currentPage: `ship-freight`
-
-#### 维护 - 数据维护(3个文件)
-
-16. `pages/mall/admin/maintain/data/logistics-company.uvue` → currentPage: `data-logistics-company`
-17. `pages/mall/admin/maintain/data/city-data.uvue` → currentPage: `data-city-data`
-18. `pages/mall/admin/maintain/data/clear-data.uvue` → currentPage: `data-clear-data`
-
-#### 维护 - 对外接口(1个文件)
-
-19. `pages/mall/admin/maintain/external/account.uvue` → currentPage: `external-account`
-
-#### 维护 - 语言设置(4个文件)
-
-20. `pages/mall/admin/maintain/i18n/language-list.uvue` → currentPage: `i18n-language-list`
-21. `pages/mall/admin/maintain/i18n/language-detail.uvue` → currentPage: `i18n-language-detail`
-22. `pages/mall/admin/maintain/i18n/region-list.uvue` → currentPage: `i18n-region-list`
-23. `pages/mall/admin/maintain/i18n/translate-config.uvue` → currentPage: `i18n-translate-config`
-
-#### 维护 - 开发工具(5个文件)
-
-24. `pages/mall/admin/maintain/dev-tools/database.uvue` → currentPage: `dev-tools-db`
-25. `pages/mall/admin/maintain/dev-tools/file.uvue` → currentPage: `dev-tools-file`
-26. `pages/mall/admin/maintain/dev-tools/api.uvue` → currentPage: `dev-tools-api`
-27. `pages/mall/admin/maintain/dev-tools/codegen.uvue` → currentPage: `dev-tools-codegen`
-28. `pages/mall/admin/maintain/dev-tools/data-dict.uvue` → currentPage: `dev-tools-dict`
-
----
-
-### 【类别 C】需要修复 currentPage(7个文件)
-
-#### 修复属性名(2个文件)
-
-1. `pages/mall/admin/design/index.uvue`
- - **修改前**:``
- - **修改后**:``
-
-2. `pages/mall/admin/customer-service/list.uvue`
- - **修改前**:``
- - **修改后**:``
-
-#### 修复位置和属性名(1个文件)
-
-3. `pages/mall/admin/user-statistics.uvue`
- - **修改前**:
- ```uvue
-
-
- ```
- - **修改后**:
- ```uvue
-
-
- ```
-
-#### 添加 currentPage(3个文件)
-
-4. `pages/mall/admin/content/index.uvue` → 添加 currentPage: `content-list`
-5. `pages/mall/admin/system-settings.uvue` → 添加 currentPage: `sys-basic`
-6. `pages/mall/admin/maintain/dev-config/category.uvue` → 添加 currentPage: `dev-config-category`
-7. `pages/mall/admin/maintain/system-info.uvue` → 添加 currentPage: `system-info`
-
----
-
-### 【类别 D】动态 currentPage(已正确 - 需验证)
-
-1. `pages/mall/admin/user-management.uvue` ✅
- - 已正确实现根据 action 参数动态设置 currentPage
- - 无需修改
-
----
-
-## 修改优先级建议
-
-### 🔴 优先级 1 - 高危(15个文件 - 必须修改)
-
-这些文件完全没有 AdminLayout,会导致页面无法正确显示导航和布局:
-
-- product-management.uvue
-- order-management.uvue
-- marketing/coupon/list.uvue
-- marketing/coupon/receive.uvue
-- marketing/points/index.uvue
-- marketing/signin/rule.uvue
-- marketing/signin/record.uvue
-- customer-service/\*.uvue (4个文件)
-- system/shipping/\*.uvue (4个文件)
-
-### 🟡 优先级 2 - 中等(20个文件 - 应该修改)
-
-这些文件已导入 AdminLayout 但未使用,或属性不正确:
-
-- product-\*.uvue (6个文件)
-- system/api/\*.uvue (8个文件)
-- maintain/dev-config/\*.uvue (5个)
-- design/index.uvue, user-statistics.uvue, 等
-
-### 🟢 优先级 3 - 低(验证阶段)
-
-- user-management.uvue (已正确实现)
-
----
-
-## 实施建议
-
-1. **分批修改**:按优先级分批修改,每批10-15个文件
-2. **验证方法**:修改后在浏览器中访问每个页面,检查是否正确显示 AdminLayout
-3. **检查清单**:
- - 左侧导航菜单是否显示
- - 正确的菜单项是否高亮
- - 顶部面包屑导航是否正确
- - 页面内容是否正确显示
-
----
-
-_文档生成时间:2026年1月30日_
diff --git a/mall/ADMIN_PAGE_QUICK_REFERENCE.md b/mall/ADMIN_PAGE_QUICK_REFERENCE.md
deleted file mode 100644
index 31956b9e..00000000
--- a/mall/ADMIN_PAGE_QUICK_REFERENCE.md
+++ /dev/null
@@ -1,313 +0,0 @@
-# 后台页面检查 - 快速参考表
-
-## 📊 整体统计
-
-- **总路由数**:76 条(包括所有 tab 参数变体)
-- **总文件数**:50+ 个 uvue 文件
-- **完全符合**:2 个(2.6%)
-- **部分符合**:6 个(7.9%)
-- **动态实现**:5 个(6.6%)
-- **需要修改**:63 个(82.9%)
-
----
-
-## ✅ 已完全符合的文件(2个)
-
-```
-✅ pages/mall/admin/homePage/index.uvue
- └─
-
-✅ pages/mall/admin/product-statistics.uvue
- └─
-```
-
----
-
-## ⚠️ 部分符合的文件(需要小修改)
-
-### 属性名错误(使用 current-page 而非 currentPage)
-
-```
-❌ pages/mall/admin/design/index.uvue
- 现在:
- 应该:
-
-❌ pages/mall/admin/customer-service/list.uvue
- 现在:
- 应该:
-```
-
-### currentPage 在错误的位置
-
-```
-❌ pages/mall/admin/user-statistics.uvue
- 现在:
- 应该:
-
-❌ pages/mall/admin/content/index.uvue
- 现在:(无 currentPage)
- 应该:
-
-❌ pages/mall/admin/system-settings.uvue
- 现在:(无 currentPage)
- 应该:
-
-❌ pages/mall/admin/maintain/dev-config/category.uvue
- 现在:(无 currentPage)
- 应该:
-
-❌ pages/mall/admin/maintain/system-info.uvue
- 现在:(无 currentPage)
- 应该:
-```
-
----
-
-## 🔄 动态 currentPage 实现(已正确)
-
-```
-✅ pages/mall/admin/user-management.uvue
-
- // 根据 action 参数动态变化:
- // action='' → user-list
- // action=group → user-group
- // action=tag → user-tag
- // action=level → user-level
- // action=config → user-config
-```
-
----
-
-## ❌ 需要完全重新包装的文件(36个)
-
-### 商品和订单(需要处理 tab 参数)
-
-```
-❌ pages/mall/admin/product-management.uvue
- 缺少:
-
-❌ pages/mall/admin/order-management.uvue
- 需要动态 currentPage(根据 tab 参数):
- - tab=stats → order-stats
- - tab=list → order-list
- - tab=aftersale → order-aftersale
- - tab=cashier → order-cashier
- - tab=verify → order-verify
- - tab=config → order-config
-```
-
-### 营销和客服(需要包装)
-
-```
-❌ pages/mall/admin/marketing/coupon/list.uvue
- 缺少:
-
-❌ pages/mall/admin/marketing/coupon/receive.uvue
- 缺少:
-
-❌ pages/mall/admin/marketing/points/index.uvue
- 需要动态 currentPage(根据 tab 参数):
- 多个标签页对应不同的 currentPage
-
-❌ pages/mall/admin/marketing/signin/rule.uvue
- 缺少:
-
-❌ pages/mall/admin/marketing/signin/record.uvue
- 缺少:
-
-❌ pages/mall/admin/customer-service/script.uvue
- 缺少:
-
-❌ pages/mall/admin/customer-service/messages.uvue
- 缺少:
-
-❌ pages/mall/admin/customer-service/auto-reply.uvue
- 缺少:
-
-❌ pages/mall/admin/customer-service/config.uvue
- 缺少:
-```
-
-### 系统管理(需要包装)
-
-```
-❌ pages/mall/admin/system/shipping/courier.uvue
- 缺少:
-
-❌ pages/mall/admin/system/shipping/pickup/points.uvue
- 缺少:
-
-❌ pages/mall/admin/system/shipping/pickup/verifiers.uvue
- 缺少:
-
-❌ pages/mall/admin/system/shipping/freight-template.uvue
- 缺少:
-```
-
-### 维护管理(需要包装)
-
-```
-❌ pages/mall/admin/maintain/data/logistics-company.uvue
- 缺少:
-
-❌ pages/mall/admin/maintain/data/city-data.uvue
- 缺少:
-
-❌ pages/mall/admin/maintain/data/clear-data.uvue
- 缺少:
-
-❌ pages/mall/admin/maintain/external/account.uvue
- 缺少:
-
-❌ pages/mall/admin/maintain/i18n/language-list.uvue
- 缺少:
-
-❌ pages/mall/admin/maintain/i18n/language-detail.uvue
- 缺少:
-
-❌ pages/mall/admin/maintain/i18n/region-list.uvue
- 缺少:
-
-❌ pages/mall/admin/maintain/i18n/translate-config.uvue
- 缺少:
-
-❌ pages/mall/admin/maintain/dev-tools/database.uvue
- 缺少:
-
-❌ pages/mall/admin/maintain/dev-tools/file.uvue
- 缺少:
-
-❌ pages/mall/admin/maintain/dev-tools/api.uvue
- 缺少:
-
-❌ pages/mall/admin/maintain/dev-tools/codegen.uvue
- 缺少:
-
-❌ pages/mall/admin/maintain/dev-tools/data-dict.uvue
- 缺少:
-```
-
----
-
-## 📋 已导入但未使用的文件(27个 - 类别 A)
-
-这些文件已经导入 AdminLayout,但在 template 中没有使用它。需要在模板中使用并添加 currentPage。
-
-### 商品管理(6个)
-
-```
-❌ pages/mall/admin/product-classification.uvue → 'product-classification'
-❌ pages/mall/admin/product-specifications.uvue → 'product-specifications'
-❌ pages/mall/admin/product-parameters.uvue → 'product-parameters'
-❌ pages/mall/admin/product-labels.uvue → 'product-labels'
-❌ pages/mall/admin/product-protection.uvue → 'product-protection'
-❌ pages/mall/admin/product-reviews.uvue → 'product-reviews'
-```
-
-### 系统设置(8个)
-
-```
-❌ pages/mall/admin/system/message-management.uvue → 'sys-message'
-❌ pages/mall/admin/system/agreement-settings.uvue → 'sys-agreement'
-❌ pages/mall/admin/system/receipt-settings.uvue → 'sys-receipt'
-❌ pages/mall/admin/system/permission/role.uvue → 'sys-role'
-❌ pages/mall/admin/system/permission/admin-list.uvue → 'sys-admin'
-❌ pages/mall/admin/system/permission/permission-setting.uvue → 'sys-perm-setting'
-❌ pages/mall/admin/system/api/yht/page.uvue → 'api-yht-page'
-❌ pages/mall/admin/system/api/yht/config.uvue → 'api-yht-config'
-```
-
-### 系统 API(6个)
-
-```
-❌ pages/mall/admin/system/api/storage.uvue → 'api-storage'
-❌ pages/mall/admin/system/api/collect.uvue → 'api-collect'
-❌ pages/mall/admin/system/api/logistics.uvue → 'api-logistics'
-❌ pages/mall/admin/system/api/waybill.uvue → 'api-waybill'
-❌ pages/mall/admin/system/api/sms.uvue → 'api-sms'
-❌ pages/mall/admin/system/api/pay.uvue → 'api-pay'
-```
-
-### 维护 - 开发配置(5个)
-
-```
-❌ pages/mall/admin/maintain/dev-config/combination-data.uvue → 'dev-config-combo'
-❌ pages/mall/admin/maintain/dev-config/cron-job.uvue → 'dev-config-cron'
-❌ pages/mall/admin/maintain/dev-config/permission.uvue → 'dev-config-permission'
-❌ pages/mall/admin/maintain/dev-config/module-config.uvue → 'dev-config-module'
-❌ pages/mall/admin/maintain/dev-config/custom-event.uvue → 'dev-config-event'
-```
-
-### 维护 - 安全维护(3个)
-
-```
-❌ pages/mall/admin/maintain/security/refresh-cache.uvue → 'security-refresh-cache'
-❌ pages/mall/admin/maintain/security/system-log.uvue → 'security-system-log'
-❌ pages/mall/admin/maintain/security/online-upgrade.uvue → 'security-online-upgrade'
-```
-
----
-
-## 🔧 快速修改命令指南
-
-### 对于类别 C 的简单修改(7个文件)
-
-**示例 1:修复属性名**
-
-```bash
-# 在 design/index.uvue
-# 查找:current-page='design'
-# 替换为::currentPage="'design-home'"
-```
-
-**示例 2:移动 currentPage**
-
-```bash
-# 在 user-statistics.uvue
-# 查找:
-# 替换为:
-```
-
-**示例 3:添加 currentPage**
-
-```bash
-# 在 content/index.uvue
-# 查找:
-# 替换为:
-```
-
----
-
-## 💡 重要提示
-
-1. **属性名必须使用 camelCase**:使用 `currentPage` 而不是 `current-page`
-2. **值需要用引号**:`:currentPage="'value'"` 或 `:currentPage="dynamicValue"`
-3. **导入必须存在**:确保导入了 `AdminLayout from '@/layouts/admin/AdminLayout.uvue'`
-4. **位置很重要**:currentPage 属性必须在 `` 标签上,而不是内层元素上
-5. **动态值推荐**:对于多标签页面,建议使用动态 currentPage(如 user-management.uvue)
-
----
-
-## 📁 完整的文件列表
-
-### 按状态分类
-
-| 状态 | 数量 | 文件 |
-| ----------- | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| ✅ 完全符合 | 2 | homePage/index.uvue, product-statistics.uvue |
-| ⚠️ 需小修改 | 6 | design/index.uvue, user-statistics.uvue, content/index.uvue, customer-service/list.uvue, system-settings.uvue, maintain/system-info.uvue, maintain/dev-config/category.uvue |
-| 🔄 动态实现 | 5 | user-management.uvue, order-management.uvue (需实现), marketing/points/index.uvue (需实现) |
-| ❌ 需要修改 | 63 | 其他所有文件 |
-
----
-
-## 📞 获取更详细的信息
-
-- 完整清单:查看 `ADMIN_PAGE_COMPLIANCE_CHECKLIST.md`
-- 修改计划:查看 `ADMIN_PAGE_MODIFICATION_PLAN.md`
-- Menu 定义:查看 `layouts/admin/utils/menu.uts`
-- Layout 组件:查看 `layouts/admin/AdminLayout.uvue`
-
----
-
-_快速参考表 - 生成时间:2026年1月30日_
diff --git a/mall/ADMIN_PAGE_START_HERE.md b/mall/ADMIN_PAGE_START_HERE.md
deleted file mode 100644
index b7b0122a..00000000
--- a/mall/ADMIN_PAGE_START_HERE.md
+++ /dev/null
@@ -1,399 +0,0 @@
-# 📋 后台页面检查 - 最终交付清单
-
-## ✅ 任务完成
-
-我已成功完成了对所有后台页面 AdminLayout 包装合规性的全面检查。
-
----
-
-## 📊 检查结果概览
-
-### 核心数据
-
-- **检查的路由**:76 条(包含所有参数变体)
-- **涉及的文件**:50+ 个 uvue 文件
-- **检查覆盖率**:100%
-- **完全符合**:2 个文件(2.6%)
-- **需要修改**:74 个文件(97.4%)
-
-### 问题分布
-
-```
-❌ 完全缺少 AdminLayout: 36 个文件
-❌ 已导入但未使用: 27 个文件
-⚠️ 属性或值有问题: 7 个文件
-🔄 需要动态处理: 3 个文件
-✅ 已完全符合: 2 个文件
-```
-
----
-
-## 📚 生成的文档(6份)
-
-### 1️⃣ **ADMIN_PAGE_COMPLETE.md** (你在这里)
-
-- 最终交付清单
-- 所有文档的快速总结
-
-### 2️⃣ **ADMIN_PAGE_INDEX.md** ⭐ 开始这里
-
-- 文档导航索引
-- 快速开始指南
-- 按角色和需求的导航
-
-### 3️⃣ **ADMIN_PAGE_SUMMARY.md** ⭐ 执行总结
-
-- 检查结果统计
-- 关键发现(6个类别)
-- 需要修改的文件列表(按优先级)
-- 修改建议和下一步
-
-### 4️⃣ **ADMIN_PAGE_COMPLIANCE_CHECKLIST.md** ⭐ 完整清单
-
-- 所有 76 条路由的详细清单
-- 按模块组织(用户、订单、商品等)
-- 每个文件的状态和说明
-- 统计汇总和分类
-
-### 5️⃣ **ADMIN_PAGE_MODIFICATION_PLAN.md** ⭐ 执行计划
-
-- 6 种修改方案(附代码示例)
-- 所有需要修改的文件详细分类
-- 每个文件的具体修改说明
-- 修改优先级建议
-- 实施时间估计
-
-### 6️⃣ **ADMIN_PAGE_QUICK_REFERENCE.md** ⭐ 快速参考
-
-- 快速查找表格
-- 所有 76 条路由的状态概览
-- 按问题类型快速导航
-- 常见问题解答
-
-### 7️⃣ **ADMIN_PAGE_CHECKLIST.csv** 📊 数据表
-
-- 所有 76 条路由的 CSV 格式
-- 可在 Excel 中打开
-- 易于数据处理和分析
-
----
-
-## 🎯 按优先级的修改建议
-
-### 🟢 优先级 3 - 低(1-2 小时)- 7 个文件
-
-快速修改,只需要小的调整。**推荐先做这个**。
-
-包括:
-
-- pages/mall/admin/design/index.uvue
-- pages/mall/admin/user-statistics.uvue
-- pages/mall/admin/content/index.uvue
-- pages/mall/admin/customer-service/list.uvue
-- pages/mall/admin/system-settings.uvue
-- pages/mall/admin/maintain/dev-config/category.uvue
-- pages/mall/admin/maintain/system-info.uvue
-
-### 🟡 优先级 2 - 中(4-6 小时)- 27 个文件
-
-已导入但未使用,需要在模板中使用。
-
-包括:
-
-- 所有 product/\*.uvue(6个)
-- 所有 system/api/\*.uvue(8个)
-- 所有 maintain/dev-config/\*.uvue(5个)
-- 以及其他维护页面(8个)
-
-### 🔴 优先级 1 - 高(8-12 小时)- 36 个文件
-
-完全没有 AdminLayout,需要从零开始包装。
-
-包括:
-
-- pages/mall/admin/product-management.uvue
-- pages/mall/admin/order-management.uvue
-- 所有 marketing/coupon/\*.uvue(2个)
-- 所有 customer-service/\*.uvue(4个)
-- 所有 system/shipping/\*.uvue(4个)
-- 以及其他页面(19个)
-
----
-
-## 💻 快速使用指南
-
-### 第一步:理解现状(5 分钟)
-
-1. 打开 [ADMIN_PAGE_INDEX.md](ADMIN_PAGE_INDEX.md)
-2. 快速浏览本文档
-3. 理解问题分类
-
-### 第二步:选择修改目标(5 分钟)
-
-1. 查看优先级建议
-2. 选择要修改的文件(推荐从低优先级开始)
-3. 用 Ctrl+F 在快速参考中搜索文件
-
-### 第三步:获取修改方案(5 分钟)
-
-1. 打开 [ADMIN_PAGE_MODIFICATION_PLAN.md](ADMIN_PAGE_MODIFICATION_PLAN.md)
-2. 找到对应的修改方案
-3. 复制代码示例
-
-### 第四步:应用修改(5-10 分钟每个文件)
-
-1. 在 VS Code 中打开文件
-2. 按照修改方案修改代码
-3. 保存文件
-
-### 第五步:验证结果(1-2 分钟每个文件)
-
-1. 在浏览器中访问修改后的页面
-2. 检查导航菜单是否显示
-3. 检查当前页面是否高亮
-
----
-
-## 📁 所有生成文件位置
-
-```
-d:\骅锋\mall\
-├── ADMIN_PAGE_COMPLETE.md (最终交付清单)
-├── ADMIN_PAGE_INDEX.md (开始这里 ⭐)
-├── ADMIN_PAGE_SUMMARY.md (执行总结 ⭐)
-├── ADMIN_PAGE_COMPLIANCE_CHECKLIST.md (完整清单 ⭐)
-├── ADMIN_PAGE_MODIFICATION_PLAN.md (修改计划 ⭐)
-├── ADMIN_PAGE_QUICK_REFERENCE.md (快速参考 ⭐)
-└── ADMIN_PAGE_CHECKLIST.csv (数据表 📊)
-```
-
----
-
-## 🔍 根据你的角色快速导航
-
-### 👔 项目经理
-
-**需要**:了解整体情况和进度
-**应该看**:[ADMIN_PAGE_SUMMARY.md](ADMIN_PAGE_SUMMARY.md) 前 3 部分
-**时间**:10 分钟
-
-### 👨💻 开发人员
-
-**需要**:修改某个文件
-**应该看**:[ADMIN_PAGE_QUICK_REFERENCE.md](ADMIN_PAGE_QUICK_REFERENCE.md)
-**搜索**:文件名
-**时间**:5 分钟
-
-### 📊 数据分析师
-
-**需要**:完整的数据清单
-**应该看**:[ADMIN_PAGE_CHECKLIST.csv](ADMIN_PAGE_CHECKLIST.csv)
-**操作**:在 Excel 中打开
-
-### 🔬 QA 测试人员
-
-**需要**:验证清单和测试方法
-**应该看**:[ADMIN_PAGE_COMPLIANCE_CHECKLIST.md](ADMIN_PAGE_COMPLIANCE_CHECKLIST.md)
-**时间**:15 分钟
-
----
-
-## ✨ 文档特点
-
-### ✓ 全面
-
-- 覆盖所有 76 条路由
-- 分析所有 50+ 个文件
-- 识别所有问题类型
-
-### ✓ 详细
-
-- 每个文件的状态清晰标注
-- 每个问题都有具体说明
-- 每个修改都有代码示例
-
-### ✓ 易用
-
-- 按优先级组织
-- 按问题类型分类
-- 快速查找工具(CSV 表格)
-- 清晰的导航索引
-
-### ✓ 可操作
-
-- 提供了 6 种修改方案
-- 附带代码示例
-- 包含验证方法
-- 估计了时间投入
-
----
-
-## 📈 修改时间估计
-
-| 阶段 | 文件数 | 每个文件 | 总计 |
-| -------- | ------ | ------------ | -------------- |
-| 低优先级 | 7 | 10-15 分钟 | 1-2 小时 |
-| 中优先级 | 27 | 10-15 分钟 | 4-6 小时 |
-| 高优先级 | 36 | 10-15 分钟 | 6-9 小时 |
-| 验证 | 70 | 1-2 分钟 | 1.5-2 小时 |
-| **总计** | **70** | **~12 分钟** | **13-20 小时** |
-
----
-
-## 🎓 如何使用这些文档
-
-### 情景 1:新开发人员接手项目
-
-1. 先阅读 [ADMIN_PAGE_SUMMARY.md](ADMIN_PAGE_SUMMARY.md)
-2. 了解项目状况
-3. 然后根据分配的文件开始修改
-
-### 情景 2:需要快速了解某个页面
-
-1. 在 [ADMIN_PAGE_QUICK_REFERENCE.md](ADMIN_PAGE_QUICK_REFERENCE.md) 中搜索文件名
-2. 查看该文件的状态和修改方案
-3. 应用修改
-
-### 情景 3:需要完整的路由清单
-
-1. 打开 [ADMIN_PAGE_COMPLIANCE_CHECKLIST.md](ADMIN_PAGE_COMPLIANCE_CHECKLIST.md)
-2. 或打开 [ADMIN_PAGE_CHECKLIST.csv](ADMIN_PAGE_CHECKLIST.csv) 在 Excel 中
-
-### 情景 4:需要进度跟踪
-
-1. 打开 CSV 文件
-2. 添加一列用于标记完成状态
-3. 跟踪修改进度
-
----
-
-## 🚀 立即开始
-
-### 第一个行动(5 分钟)
-
-1. 打开 [ADMIN_PAGE_INDEX.md](ADMIN_PAGE_INDEX.md)
-2. 选择一个适合的起点
-
-### 推荐起点
-
-- 新手:从 [ADMIN_PAGE_INDEX.md](ADMIN_PAGE_INDEX.md) 开始
-- 有经验的开发人员:直接打开 [ADMIN_PAGE_QUICK_REFERENCE.md](ADMIN_PAGE_QUICK_REFERENCE.md)
-- 项目经理:打开 [ADMIN_PAGE_SUMMARY.md](ADMIN_PAGE_SUMMARY.md)
-
----
-
-## ✅ 质量保证
-
-我已确保:
-
-- ✓ 所有 76 条路由都被检查
-- ✓ 所有 50+ 个文件都被分析
-- ✓ 所有问题都被分类
-- ✓ 所有修改方案都附带代码示例
-- ✓ 所有优先级都被标注
-- ✓ 所有文档都已交叉验证
-
----
-
-## 📞 常见问题快速答案
-
-**Q: 我应该从哪个文档开始?**
-A: 从 [ADMIN_PAGE_INDEX.md](ADMIN_PAGE_INDEX.md) 开始,它会引导你。
-
-**Q: 哪些文件最紧急?**
-A: 优先级高(🔴)的 36 个文件,但建议从优先级低的开始以积累经验。
-
-**Q: 修改难度大吗?**
-A: 不大,所有代码示例都已提供,只需复制粘贴。
-
-**Q: 如何验证修改?**
-A: 在浏览器中访问页面,检查菜单是否显示。
-
-**Q: 时间够吗?**
-A: 预计 13-20 小时,取决于开发效率。
-
----
-
-## 📊 统计数据汇总
-
-| 指标 | 数值 |
-| ------------ | ---------- |
-| 检查的路由 | 76 |
-| 涉及的文件 | 50+ |
-| 生成的文档 | 7 |
-| 完全符合 | 2 |
-| 需要修改 | 74 |
-| 修改方案 | 6 种 |
-| 代码示例 | 12+ |
-| 预计完成时间 | 13-20 小时 |
-| 文档总字数 | 30000+ |
-
----
-
-## 🎉 预期成果
-
-修改完成后,你将拥有:
-
-- ✅ 所有后台页面都显示正确的 AdminLayout
-- ✅ 所有页面都有统一的导航和布局
-- ✅ 用户体验大幅改善
-- ✅ 代码更易维护和扩展
-- ✅ 更少的 BUG 和不一致
-
----
-
-## 📝 下一步行动
-
-### 现在就做
-
-1. ☐ 打开 [ADMIN_PAGE_INDEX.md](ADMIN_PAGE_INDEX.md)
-2. ☐ 选择一个优先级低的文件
-3. ☐ 获取修改方案
-4. ☐ 完成第一个修改
-5. ☐ 验证结果
-
-### 然后做
-
-6. ☐ 继续修改其他文件
-7. ☐ 定期提交和测试
-8. ☐ 收集反馈
-9. ☐ 完成所有修改
-10. ☐ 部署到生产环境
-
----
-
-## 💬 反馈
-
-如果你在使用这些文档时遇到问题:
-
-1. 检查 [ADMIN_PAGE_QUICK_REFERENCE.md](ADMIN_PAGE_QUICK_REFERENCE.md) 的问题排查部分
-2. 确保按照提供的代码示例修改
-3. 验证所有导入都正确
-
----
-
-## 📅 信息
-
-- **生成日期**:2026年1月30日
-- **检查方法**:自动化代码分析
-- **准确度**:100%
-- **文档语言**:中文
-- **版本**:v1.0
-
----
-
-## 🎯 最终建议
-
-**不要等待,现在就开始!**
-
-选择一个优先级低的文件,按照提供的模板修改,在浏览器中测试。你会发现修改很简单,完成每个文件只需 10-15 分钟。
-
-**推荐的第一个文件**:`pages/mall/admin/design/index.uvue`(最简单,只需修改属性名)
-
----
-
-👉 **[立即开始 - 打开 ADMIN_PAGE_INDEX.md](ADMIN_PAGE_INDEX.md)**
-
-_任务完成日期:2026年1月30日_
-_所有文档已在项目根目录生成_
-_准备好修改了吗?开始吧!_
diff --git a/mall/ADMIN_PAGE_SUMMARY.md b/mall/ADMIN_PAGE_SUMMARY.md
deleted file mode 100644
index be8c4b85..00000000
--- a/mall/ADMIN_PAGE_SUMMARY.md
+++ /dev/null
@@ -1,397 +0,0 @@
-# 后台页面包装检查 - 执行总结
-
-## 任务概述
-
-检查 `menu.uts` 中定义的所有 **66 条后台路由**(76 条变体)对应的 **50+ 个 uvue 文件**,确认它们是否已正确使用 AdminLayout 组件包装并包含 currentPage prop。
-
----
-
-## 📊 检查结果
-
-### 整体状况
-
-- **检查的路由条目**:76 条(包括所有参数变体)
-- **检查的文件**:50+ 个 uvue 文件
-- **检查完成度**:100%
-
-### 合规性统计
-
-| 状态类别 | 数量 | 百分比 | 说明 |
-| ----------- | ------ | -------- | ------------------------------------ |
-| ✅ 完全符合 | 2 | 2.6% | 已正确包装并有正确 currentPage |
-| ⚠️ 部分符合 | 6 | 7.9% | 有 AdminLayout 但 currentPage 有问题 |
-| 🔄 动态实现 | 5 | 6.6% | 已实现或需要实现动态 currentPage |
-| ❌ 需要修改 | 63 | 82.9% | 缺少包装或不正确 |
-| **总计** | **76** | **100%** | - |
-
----
-
-## 🔍 关键发现
-
-### 问题分类
-
-#### 1️⃣ 完全缺少 AdminLayout 包装(最严重)
-
-- **数量**:36 个文件
-- **影响**:页面无法显示导航菜单、面包屑和布局
-- **例子**:
- - `pages/mall/admin/product-management.uvue`
- - `pages/mall/admin/order-management.uvue`
- - `pages/mall/admin/marketing/coupon/list.uvue`
- - 等...
-
-#### 2️⃣ 已导入但未在模板中使用(次严重)
-
-- **数量**:27 个文件
-- **影响**:导入被浪费,页面无法显示布局
-- **原因**:开发人员导入组件后忘记在 template 中使用
-- **例子**:
- - `pages/mall/admin/product-classification.uvue`
- - `pages/mall/admin/system/api/storage.uvue`
- - 所有权限、系统 API 配置页面
-
-#### 3️⃣ 属性名或值不正确(中等问题)
-
-- **数量**:7 个文件
-- **问题类型**:
- - 使用 kebab-case (`current-page`) 而非 camelCase (`currentPage`):2 个
- - currentPage 放在内层 view 而非 AdminLayout:1 个
- - 缺少 currentPage 属性:4 个
-- **例子**:
- - `pages/mall/admin/design/index.uvue` - 属性名错误
- - `pages/mall/admin/user-statistics.uvue` - 位置错误
- - `pages/mall/admin/content/index.uvue` - 缺少 currentPage
-
-#### 4️⃣ 需要动态处理的页面
-
-- **数量**:3 个文件
-- **现状**:
- - `user-management.uvue` ✅ 已正确实现
- - `order-management.uvue` ❌ 需要实现根据 tab 参数的动态 currentPage
- - `marketing/points/index.uvue` ❌ 需要实现根据 tab 参数的动态 currentPage
-
----
-
-## 📋 需要修改的文件完整列表
-
-### 【优先级 🔴 高】必须立即修改(36个文件)
-
-这些文件完全没有 AdminLayout,直接影响用户体验。
-
-```
-1. pages/mall/admin/product-management.uvue
-2. pages/mall/admin/order-management.uvue
-3. pages/mall/admin/marketing/coupon/list.uvue
-4. pages/mall/admin/marketing/coupon/receive.uvue
-5. pages/mall/admin/marketing/points/index.uvue
-6. pages/mall/admin/marketing/signin/rule.uvue
-7. pages/mall/admin/marketing/signin/record.uvue
-8. pages/mall/admin/customer-service/script.uvue
-9. pages/mall/admin/customer-service/messages.uvue
-10. pages/mall/admin/customer-service/auto-reply.uvue
-11. pages/mall/admin/customer-service/config.uvue
-12. pages/mall/admin/system/shipping/courier.uvue
-13. pages/mall/admin/system/shipping/pickup/points.uvue
-14. pages/mall/admin/system/shipping/pickup/verifiers.uvue
-15. pages/mall/admin/system/shipping/freight-template.uvue
-16. pages/mall/admin/maintain/data/logistics-company.uvue
-17. pages/mall/admin/maintain/data/city-data.uvue
-18. pages/mall/admin/maintain/data/clear-data.uvue
-19. pages/mall/admin/maintain/external/account.uvue
-20. pages/mall/admin/maintain/i18n/language-list.uvue
-21. pages/mall/admin/maintain/i18n/language-detail.uvue
-22. pages/mall/admin/maintain/i18n/region-list.uvue
-23. pages/mall/admin/maintain/i18n/translate-config.uvue
-24. pages/mall/admin/maintain/dev-tools/database.uvue
-25. pages/mall/admin/maintain/dev-tools/file.uvue
-26. pages/mall/admin/maintain/dev-tools/api.uvue
-27. pages/mall/admin/maintain/dev-tools/codegen.uvue
-28. pages/mall/admin/maintain/dev-tools/data-dict.uvue
-```
-
-### 【优先级 🟡 中】应该修改(27个文件)
-
-这些文件已导入 AdminLayout 但未在模板中使用。
-
-```
-商品管理(6个):
-1. pages/mall/admin/product-classification.uvue
-2. pages/mall/admin/product-specifications.uvue
-3. pages/mall/admin/product-parameters.uvue
-4. pages/mall/admin/product-labels.uvue
-5. pages/mall/admin/product-protection.uvue
-6. pages/mall/admin/product-reviews.uvue
-
-系统设置(8个):
-7. pages/mall/admin/system/message-management.uvue
-8. pages/mall/admin/system/agreement-settings.uvue
-9. pages/mall/admin/system/receipt-settings.uvue
-10. pages/mall/admin/system/permission/role.uvue
-11. pages/mall/admin/system/permission/admin-list.uvue
-12. pages/mall/admin/system/permission/permission-setting.uvue
-13. pages/mall/admin/system/api/yht/page.uvue
-14. pages/mall/admin/system/api/yht/config.uvue
-
-系统 API(6个):
-15. pages/mall/admin/system/api/storage.uvue
-16. pages/mall/admin/system/api/collect.uvue
-17. pages/mall/admin/system/api/logistics.uvue
-18. pages/mall/admin/system/api/waybill.uvue
-19. pages/mall/admin/system/api/sms.uvue
-20. pages/mall/admin/system/api/pay.uvue
-
-维护管理(7个):
-21. pages/mall/admin/maintain/dev-config/combination-data.uvue
-22. pages/mall/admin/maintain/dev-config/cron-job.uvue
-23. pages/mall/admin/maintain/dev-config/permission.uvue
-24. pages/mall/admin/maintain/dev-config/module-config.uvue
-25. pages/mall/admin/maintain/dev-config/custom-event.uvue
-26. pages/mall/admin/maintain/security/refresh-cache.uvue
-27. pages/mall/admin/maintain/security/system-log.uvue
-28. pages/mall/admin/maintain/security/online-upgrade.uvue
-```
-
-### 【优先级 🟢 低】小修改(7个文件)
-
-这些文件有 AdminLayout 但需要修复属性或添加 currentPage。
-
-```
-1. pages/mall/admin/design/index.uvue
- ├─ 问题:current-page='design' (应为 currentPage="design-home")
-
-2. pages/mall/admin/user-statistics.uvue
- ├─ 问题:currentPage 在内层 view (应在 AdminLayout 上)
-
-3. pages/mall/admin/content/index.uvue
- ├─ 问题:缺少 currentPage (应为 content-list)
-
-4. pages/mall/admin/customer-service/list.uvue
- ├─ 问题:current-page='list' (应为 currentPage="cs-list")
-
-5. pages/mall/admin/system-settings.uvue
- ├─ 问题:缺少 currentPage (应为 sys-basic)
-
-6. pages/mall/admin/maintain/dev-config/category.uvue
- ├─ 问题:缺少 currentPage (应为 dev-config-category)
-
-7. pages/mall/admin/maintain/system-info.uvue
- ├─ 问题:缺少 currentPage (应为 system-info)
-```
-
----
-
-## ✨ 已完全符合的文件(2个)
-
-这些文件可以用作参考模板:
-
-```
-✅ pages/mall/admin/homePage/index.uvue
-
-
-✅ pages/mall/admin/product-statistics.uvue
-
-```
-
----
-
-## 🎯 建议的修改方案
-
-### 修改步骤
-
-1. **第一阶段**:修复属性名和缺少 currentPage 的 7 个文件(快速)
-2. **第二阶段**:包装已导入但未使用的 27 个文件(中等难度)
-3. **第三阶段**:完全重新包装 36 个文件(大工作量)
-4. **第四阶段**:验证所有文件的正确性
-
-### 修改模板
-
-#### 情况 1:完全没有 AdminLayout
-
-```uvue
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-```
-
-#### 情况 2:已导入但未使用
-
-```uvue
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-```
-
-#### 情况 3:属性名或值错误
-
-```uvue
-
-
-
-
-
-```
-
-#### 情况 4:动态 currentPage(如 order-management.uvue)
-
-```uvue
-
-
-
-
-
-
-
-```
-
----
-
-## 📈 预期效果
-
-修改完成后,所有后台页面将:
-
-1. ✅ 正确显示左侧导航菜单
-2. ✅ 正确高亮当前菜单项
-3. ✅ 正确显示面包屑导航
-4. ✅ 正确显示顶部工具栏
-5. ✅ 保持一致的布局和样式
-6. ✅ 提供统一的用户体验
-
----
-
-## 📝 交付物
-
-本次检查生成了以下文档:
-
-1. **ADMIN_PAGE_COMPLIANCE_CHECKLIST.md** ⭐
- - 完整的路由清单,每个路由的状态和说明
- - 按类别总结所有需要修改的文件
-
-2. **ADMIN_PAGE_MODIFICATION_PLAN.md** ⭐
- - 详细的修改计划和建议
- - 各类别的修改方案和模板
- - 优先级建议
-
-3. **ADMIN_PAGE_QUICK_REFERENCE.md** ⭐
- - 快速参考表格
- - 每个需要修改的文件的具体修改方案
- - 完整文件列表
-
-4. **ADMIN_PAGE_SUMMARY.md**(本文档)
- - 高层总结和建议
-
----
-
-## 💬 后续步骤
-
-### 立即行动
-
-1. 查看完整清单:`ADMIN_PAGE_COMPLIANCE_CHECKLIST.md`
-2. 按优先级选择修改文件
-3. 使用提供的模板进行修改
-
-### 验证方法
-
-1. 修改后在浏览器中访问每个页面
-2. 检查左侧菜单是否显示和高亮
-3. 检查顶部导航是否正确
-4. 运行任何现有的测试套件
-
-### 预期时间
-
-- 优先级 🟢 低(7个):~1-2 小时
-- 优先级 🟡 中(27个):~4-6 小时
-- 优先级 🔴 高(36个):~8-12 小时
-- **总计**:约 13-20 小时(取决于开发效率)
-
----
-
-## 📞 问题排查
-
-### 如果菜单不显示?
-
-- 检查 AdminLayout 的导入是否正确
-- 检查 AdminLayout 的 currentPage prop 是否传入
-- 检查 currentPage 的值是否与 menu.uts 中的 id 匹配
-
-### 如果菜单项未高亮?
-
-- 检查 currentPage 的值是否正确
-- 检查属性名是否为 `currentPage` (camelCase)而非 `current-page`
-
-### 如果内容显示不正常?
-
-- 确保所有页面内容都在 AdminLayout 内的 slot 中
-- 检查是否有 CSS 冲突
-
----
-
-## 📊 参考数据
-
-### 按模块分类的统计
-
-| 模块 | 总数 | 完全符合 | 需要修改 |
-| --------- | ------ | -------- | -------- |
-| 首页/用户 | 5 | 0 | 5 |
-| 订单 | 6 | 0 | 6 |
-| 商品 | 8 | 1 | 7 |
-| 设计/文章 | 2 | 0 | 2 |
-| 客服 | 5 | 0 | 5 |
-| 营销 | 15+ | 0 | 15+ |
-| 系统设置 | 17 | 1 | 16 |
-| 维护 | 17+ | 0 | 17+ |
-| **总计** | **76** | **2** | **74** |
-
----
-
-_报告生成时间:2026年1月30日_
-_检查工具:自动化脚本_
-_准确度:100% 基于代码分析_
diff --git a/mall/ADMIN_SIDEBAR_COMPLETE_GUIDE.md b/mall/ADMIN_SIDEBAR_COMPLETE_GUIDE.md
deleted file mode 100644
index 7e83d922..00000000
--- a/mall/ADMIN_SIDEBAR_COMPLETE_GUIDE.md
+++ /dev/null
@@ -1,422 +0,0 @@
-# 确保 Admin 页面侧边栏一直显示的完整步骤
-
-## 概述
-
-确保 uni-app-x 的 Admin 页面在切换过程中保持侧边栏显示需要从多个维度进行配置。以下是完整的步骤检查清单。
-
----
-
-## 第一部分:文件和路由配置
-
-### 1.1 创建新的 Admin 页面文件
-
-**文件路径**: `pages/mall/admin/maintain//.uvue`
-
-**重点**:
-
-- ✅ 使用 UTF-8 编码(**不要 BOM**)
-- ✅ 严格的 SFC 结构: `` → `
-
-
-```
-
-### 1.2 在 pages.json 中注册路由
-
-**位置**: `pages.json` 中的合适分类下
-
-**格式**:
-
-```json
-{
- "path": "maintain//",
- "style": {
- "navigationBarTitleText": "页面标题",
- "navigationStyle": "custom"
- }
-}
-```
-
-**重点**:
-
-- ✅ `navigationStyle: "custom"` 必须设置,允许自定义 AdminLayout
-- ✅ `path` 必须与文件结构匹配
-
----
-
-## 第二部分:菜单配置
-
-### 2.1 在 menu.uts 中定义菜单项
-
-**文件**: `layouts/admin/utils/menu.uts`
-
-**两种菜单结构**:
-
-#### 选项 A:有子菜单的菜单组(推荐)
-
-```typescript
-{
- id: 'maintain',
- title: '维护',
- icon: '/static/maintain.svg',
- path: '/pages/mall/admin/maintain/...',
- groups: [
- {
- id: 'dev-config',
- title: '开发配置',
- children: [
- {
- id: 'module-config',
- title: '模块配置',
- path: '/pages/mall/admin/maintain/dev-config/module-config'
- }
- ]
- }
- ]
-}
-```
-
-#### 选项 B:没有子菜单的菜单组(叶子节点)
-
-```typescript
-{
- id: 'maintain',
- title: '维护',
- groups: [
- {
- id: 'system-info',
- title: '系统信息',
- path: '/pages/mall/admin/maintain/system-info',
- children: [] // ⚠️ 必须显式设置为空数组
- }
- ]
-}
-```
-
-**重点**:
-
-- ✅ 每个 menu item 必须有唯一的 `id`
-- ✅ 如果是叶子节点,必须显式设置 `children: []`
-- ✅ `path` 必须与 pages.json 路由匹配
-
-### 2.2 菜单 ID 命名规则
-
-**建议**:
-
-```
-一级菜单: maintain / user / order / product
-二级组: dev-config / security / data / external
-子项: module-config / permission / cron-job
-
-currentPage 值应该与 menu.id 对应:
-- 对应一级: currentPage="maintain"
-- 对应二级: currentPage="system-info"
-- 对应三级: currentPage="module-config"
-```
-
----
-
-## 第三部分:导航逻辑
-
-### 3.1 nav.uts 匹配规则
-
-**文件**: `layouts/admin/utils/nav.uts`
-
-**关键函数**: `findActiveByCurrentPage(menuList, currentPage)`
-
-**匹配顺序** (必须按此顺序):
-
-1. 一级菜单 ID 匹配: `m.id === currentPage`
-2. 二级菜单组 ID 匹配: `g.id === currentPage` ⚠️ **包括叶子节点**
-3. 二级菜单组 path 匹配: `normalize(g.path) === normalize(currentPage)`
-4. 三级菜单子项 ID 匹配: `c.id === currentPage`
-5. 三级菜单子项 path 匹配: `normalize(c.path) === normalize(currentPage)`
-6. 四级及以上: 递归查找
-7. 默认兜底: 返回 `{ activeMenuId: 'home', activeSubId: '' }`
-
-**核心代码**:
-
-```typescript
-// 关键:在检查 children 前,先检查 group 本身是否是叶子节点
-for (const g of groups) {
- if (g.id === page) {
- return { activeMenuId: m.id, activeSubId: g.id }; // ✅ 叶子节点匹配
- }
- if (g.path && normalize(g.path) === pageNorm) {
- return { activeMenuId: m.id, activeSubId: g.id }; // ✅ 叶子节点路径匹配
- }
- // 然后才检查 children
- const cs = g.children ?? [];
- // ...
-}
-```
-
-### 3.2 页面中使用 currentPage
-
-**在页面文件中**:
-
-```uvue
-
-
-
-```
-
-**currentPage 值确定规则**:
-
-- 如果页面是二级菜单组的叶子: 使用 group id (`system-info`)
-- 如果页面是三级菜单子项: 使用 child id (`module-config`)
-- 也可以使用路径形式 (`/pages/mall/admin/maintain/system-info`)
-
----
-
-## 第四部分:AdminLayout 组件
-
-### 4.1 AdminLayout.uvue 的关键逻辑
-
-**文件**: `layouts/admin/AdminLayout.uvue`
-
-**核心职责**:
-
-```typescript
-// 1. 导入必要的生命周期和工具
-import { onShow } from "@dcloudio/uni-app";
-import { findActiveByCurrentPage } from "./utils/nav.uts";
-
-// 2. 接收 currentPage prop
-const props = defineProps<{ currentPage: string }>();
-
-// 3. 同步导航状态的关键函数
-const syncActiveByCurrentPage = () => {
- let current = props.currentPage;
- if (!current) {
- // 如果没有 currentPage,从路由获取
- const pages = getCurrentPages();
- const last = pages[pages.length - 1];
- current = last?.route ? `/${last.route}` : "";
- }
- const r = findActiveByCurrentPage(menuList.value, current);
- activeMenuId.value = r.activeMenuId; // ✅ 更新一级菜单
- activeSubId.value = r.activeSubId; // ✅ 更新二级菜单
-};
-
-// 4. 在多个生命周期调用同步函数
-watch(
- () => props.currentPage,
- () => syncActiveByCurrentPage(),
- { immediate: true },
-);
-onMounted(() => syncActiveByCurrentPage());
-onShow(() => syncActiveByCurrentPage());
-
-// 5. 计算二级侧边栏的内容
-const activeGroups = computed(() => {
- const m = menuList.value.find((it) => it.id === activeMenuId.value);
- return m?.groups ?? [];
-});
-
-// 6. 根据 activeSubId 计算面包屑标题
-const breadcrumb = computed(() => {
- let subTitle = "";
- const groups = activeGroups.value;
- for (const g of groups) {
- // ✅ 检查 group 本身(支持叶子节点)
- if (g.id === activeSubId.value) {
- subTitle = g.title;
- break;
- }
- // ✅ 检查 group 的 children
- const cs = g.children ?? [];
- const hit = cs.find((c) => c.id === activeSubId.value);
- if (hit) {
- subTitle = hit.title;
- break;
- }
- }
- return subTitle
- ? `${activeMenuTitle.value} / ${subTitle}`
- : activeMenuTitle.value;
-});
-```
-
-**渲染 AdminSubSider 时**:
-
-```uvue
-
-```
-
----
-
-## 第五部分:AdminSubSider 二级侧边栏
-
-### 5.1 二级侧边栏的 groupAsChild 逻辑
-
-**文件**: `layouts/admin/components/AdminSubSider.uvue`
-
-**关键逻辑**:
-
-```typescript
-// 支持 group 作为菜单项(叶子节点)的点击处理
-const handleGroupTitleClick = (group: MenuGroup) => {
- // 如果 group 有 path,直接导航
- if (group.path) {
- go(group.path)
- }
- // 否则选中这个 group
- else {
- activeSubId.value = group.id
- }
-}
-
-// 模板中
-
-
- {{ group.title }}
-
-
-
-
-
-```
-
----
-
-## 第六部分:状态管理(可选但推荐)
-
-### 6.1 使用 state.uts 管理全局状态
-
-**文件**: `layouts/admin/state.uts`
-
-```typescript
-import { ref } from "vue";
-
-// 跨页面持久化的状态
-export const tabs = ref([]);
-export const activeTabId = ref("");
-export const isCollapsed = ref(false);
-export const hasNotification = ref(false);
-```
-
-**优点**:
-
-- ✅ 页面切换时保持侧边栏收起/展开状态
-- ✅ 标签页状态持久化
-- ✅ 通知状态保持
-
----
-
-## 完整检查清单
-
-### 📋 新增页面时必须检查:
-
-- [ ] **文件**
- - [ ] 文件位置正确: `pages/mall/admin/maintain//.uvue`
- - [ ] 编码是 UTF-8(无 BOM)
- - [ ] 正确的 SFC 结构
- - [ ] `
-
-
diff --git a/mall/CRMEB_DASHBOARD_README.md b/mall/CRMEB_DASHBOARD_README.md
deleted file mode 100644
index b0dea6fa..00000000
--- a/mall/CRMEB_DASHBOARD_README.md
+++ /dev/null
@@ -1,570 +0,0 @@
-# CRMEB 标准版后台管理系统
-
-## 📋 项目概述
-
-基于 uni-app-x 完全自主开发的 CRMEB 风格后台管理系统,严格遵循 CRMEB 设计规范,实现完整的数据看板和用户统计功能。
-
-## 🏗️ 目录结构
-
-```
-mall/
-├── App.uvue # 全局样式配置
-├── layouts/
-│ └── admin/
-│ ├── index.uvue # 主布局组件
-│ ├── components/
-│ │ └── card.uvue # 卡片组件
-│ └── utils/
-│ └── echarts-config.uts # ECharts配置
-├── pages/
-│ ├── minimal.uvue # 测试页面
-│ └── mall/
-│ └── admin/
-│ ├── index.uvue # 数据看板
-│ ├── user-management.uvue # 用户管理
-│ ├── product-management.uvue # 商品管理
-│ ├── order-management.uvue # 订单管理
-│ ├── finance-management.uvue # 财务管理
-│ └── user-statistics.uvue # 用户统计页
-├── pages.json # 页面配置
-└── CRMEB_DASHBOARD_README.md # 项目文档
-```
-
-## 🎨 设计规范
-
-### 全局样式体系
-- **24栅格系统**: 响应式布局,支持1-24列
-- **CSS变量**: 统一的颜色、间距、圆角规范
-- **全局重置**: 消除浏览器默认样式差异
-- **主题色**: CRMEB 风格的蓝色系配色
-
-### 布局架构
-- **AdminLayout**: 左侧菜单 + 顶部导航 + 标签页 + 内容区
-- **垂直菜单**: 一级图标菜单 + 二级文字菜单 + 折叠功能
-- **标签页**: 可关闭的多标签页,支持切换导航
-- **内容区**: flex:1 + height:0 + scroll-view 确保正确滚动
-
-## 📊 核心功能
-
-### 1. 数据看板 (Dashboard)
-
-#### KPI 指标卡片 (第一行)
-```vue
-
-
-
-
-
-
- ¥125,680.50
- +5.7%
-
-
-
-
-
-```
-
-#### 订单统计图表 (第二行)
-```vue
-
-
-
-
-
-
-```
-
-#### 用户分析图表 (第三行)
-```vue
-
-
-
-
-
-```
-
-### 2. 用户统计页
-
-#### 筛选条件栏
-```vue
-
-
-
-
-
-
-
-
-
-
-```
-
-#### 指标概览 (6个KPI卡片)
-```vue
-
-
-
-```
-
-#### 多折线趋势图
-```vue
-
-
-
-
-
-```
-
-## 🔧 技术实现
-
-### AdminLayout 组件
-
-#### 核心特性
-```javascript
-// 双层侧边栏
-const menuList = ref([
- {
- id: 'dashboard',
- title: '首页',
- icon: 'icon-dashboard',
- path: '/pages/mall/admin/index',
- subMenus: [] // 二级菜单
- }
- // ... 其他菜单项
-])
-
-// 标签页管理
-const tabs = ref([
- { id: 'dashboard', title: '首页', closable: false }
-])
-
-// 折叠状态
-const isCollapsed = ref(false)
-```
-
-#### 布局结构
-```vue
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-```
-
-### ECharts 图表配置
-
-#### 组合图表配置
-```javascript
-export const getOrderChartOption = (period) => ({
- series: [
- {
- name: '订单金额',
- type: 'bar',
- data: amountData,
- itemStyle: { color: '#1890ff' }
- },
- {
- name: '订单数量',
- type: 'line',
- data: countData,
- itemStyle: { color: '#52c41a' }
- }
- ]
-})
-```
-
-#### 多折线图配置
-```javascript
-export const getUserStatisticsOption = () => ({
- series: [
- { name: '新增用户', type: 'line', data: newUsersData },
- { name: '访客数', type: 'line', data: visitorsData },
- // ... 更多数据线
- ]
-})
-```
-
-## 📱 响应式设计
-
-### 断点系统
-```scss
-/* >=1200px: 4卡片一行 */
-.kpi-cards-row { display: flex; gap: 24px; }
-
-/* <=1200px: 2卡片一行 */
-@media (max-width: 1199px) {
- .kpi-card { min-width: 45%; }
-}
-
-/* <=768px: 单列布局 */
-@media (max-width: 767px) {
- .kpi-cards-row { flex-direction: column; }
- .charts-row.two-cols { flex-direction: column; }
-}
-```
-
-### 栅格系统
-```scss
-/* 24列栅格系统 */
-.col-6 { flex: 0 0 25%; max-width: 25%; }
-.col-12 { flex: 0 0 50%; max-width: 50%; }
-.col-24 { flex: 0 0 100%; max-width: 100%; }
-```
-
-## 🚀 运行指南
-
-### 开发环境
-```bash
-# HBuilderX 中运行
-# 选择:运行 -> 运行到浏览器 -> Chrome
-```
-
-### 页面访问
-- **数据看板**: `/pages/mall/admin/index`
-- **用户统计**: `/pages/mall/admin/user-statistics`
-- **其他页面**: 通过左侧菜单导航
-
-### 功能测试
-1. **菜单导航**: 点击左侧菜单切换页面
-2. **标签页**: 点击标签切换,点击关闭按钮关闭
-3. **折叠功能**: 点击折叠按钮收起/展开菜单
-4. **图表展示**: 查看各种数据图表
-5. **响应式**: 调整浏览器窗口测试适配
-
-## 📚 开发规范
-
-### 文件命名
-- **组件**: PascalCase (`AdminLayout.vue`)
-- **页面**: kebab-case (`user-statistics.uvue`)
-- **工具**: camelCase (`echarts-config.uts`)
-
-### 代码组织
-```vue
-
-
-
-
-
-
-
-```
-
-### 样式原则
-- **组件内样式**: 避免 `scoped`,确保样式隔离
-- **CSS变量**: 使用统一的主题变量
-- **BEM命名**: 清晰的样式命名规范
-- **移动优先**: 响应式设计从移动端开始
-
-## 🎯 项目特色
-
-### ✅ 完全自主开发
-- **0%源码复制**: 100%自主编写
-- **CRMEB风格**: 严格遵循设计规范
-- **技术先进**: Vue 3 + TypeScript + uni-app-x
-- **功能完整**: 数据看板 + 用户统计双页面
-
-### ✅ 设计还原度高
-- **布局结构**: 1:1还原CRMEB后台布局
-- **视觉风格**: 白底轻阴影,Element-UI设计语言
-- **交互体验**: 流畅的动画和反馈效果
-- **响应式**: 全设备适配
-
-### ✅ 架构优秀
-- **组件化**: 模块化组件设计
-- **可扩展**: 易于添加新功能
-- **可维护**: 清晰的代码结构
-- **性能优化**: 合理的渲染策略
-
-## 📋 功能清单
-
-### 已实现功能
-- ✅ CRMEB风格垂直菜单布局
-- ✅ 顶部多标签页系统
-- ✅ 双层侧边栏导航
-- ✅ KPI指标卡片展示
-- ✅ 订单统计组合图表
-- ✅ 用户趋势分析图表
-- ✅ 用户构成饼图
-- ✅ 用户统计筛选功能
-- ✅ 多折线趋势图表
-- ✅ 响应式24栅格布局
-- ✅ 完整的样式系统
-- ✅ ECharts图表配置
-
-### 扩展功能
-- 🔄 ECharts实际集成
-- 🔄 数据实时更新
-- 🔄 图表交互功能
-- 🔄 数据导出功能
-- 🔄 更多管理页面
-
----
-
-## 🎉 总结
-
-本项目成功实现了CRMEB标准版后台管理系统,具备完整的数据看板和用户统计功能。通过严格遵循CRMEB的设计规范和自主开发,确保了代码质量和技术先进性。
-
-项目采用了现代化的技术栈,实现了响应式设计和模块化架构,为后续功能扩展奠定了坚实基础。
-
----
-
-## 🚀 部署运行
-
-### 开发环境
-```bash
-# HBuilderX 中运行
-# 选择:运行 -> 运行到浏览器
-```
-
-### 访问页面
-- **数据看板**: `/pages/mall/admin/index`
-- **用户统计**: `/pages/mall/admin/user-statistics`
-- **其他页面**: 通过左侧菜单导航
-
-### 功能验证
-1. **菜单导航**: 左侧双层菜单切换页面
-2. **标签页**: 顶部标签页切换和关闭
-3. **折叠功能**: 菜单栏收起/展开
-4. **图表展示**: 查看各种数据可视化
-5. **响应式**: 调整窗口测试适配效果
-
-## 📋 功能清单
-
-### ✅ 已实现功能
-- [x] CRMEB风格垂直菜单布局
-- [x] 顶部多标签页系统
-- [x] 双层侧边栏导航
-- [x] 二级菜单Tab切换功能
-- [x] KPI指标卡片展示
-- [x] 订单统计组合图表
-- [x] 用户趋势分析图表
-- [x] 用户构成饼图
-- [x] 用户统计筛选功能
-- [x] 多折线趋势图表
-- [x] 响应式24栅格布局
-- [x] 完整的样式系统
-- [x] ECharts图表配置
-- [x] 页面参数处理(onLoad)
-- [x] Tab内部状态管理
-
-### 🎯 技术亮点
-- **完全自主开发**: 0%源码复制,100%原创
-- **CRMEB风格还原**: 严格遵循设计规范
-- **现代技术栈**: Vue 3 + TypeScript + uni-app-x
-- **架构设计**: 模块化组件,易于维护
-- **用户体验**: 流畅交互,响应式适配
-
----
-
-## 🔧 二级菜单Tab切换机制详解
-
-### 实现原理
-
-CRMEB后台的二级菜单采用 **页面级Tab切换** 模式:
-- 点击一级菜单:跳转到对应页面的**默认Tab**
-- 点击二级菜单:跳转到同一页面的**指定Tab**
-- 通过URL参数控制Tab状态
-
-### 技术实现
-
-#### 1. AdminLayout菜单配置
-```javascript
-const menuList = ref([
- {
- id: 'user',
- title: '用户管理',
- icon: 'icon-user',
- path: '/pages/mall/admin/user-management',
- subMenus: [
- {
- id: 'user-list',
- title: '用户列表',
- path: '/pages/mall/admin/user-management' // 默认Tab
- },
- {
- id: 'user-add',
- title: '添加用户',
- path: '/pages/mall/admin/user-management?action=add' // 指定Tab
- }
- ]
- },
- {
- id: 'product',
- title: '商品管理',
- icon: 'icon-shopping',
- path: '/pages/mall/admin/product-management',
- subMenus: [
- {
- id: 'product-list',
- title: '商品列表',
- path: '/pages/mall/admin/product-management'
- },
- {
- id: 'product-add',
- title: '添加商品',
- path: '/pages/mall/admin/product-management?action=add'
- },
- {
- id: 'category',
- title: '商品分类',
- path: '/pages/mall/admin/product-management?tab=category'
- }
- ]
- }
-])
-```
-
-#### 2. 菜单点击处理
-```javascript
-const handleMenuClick = (menu: any) => {
- activeMenu.value = menu.id
- // 跳转到默认Tab
- uni.navigateTo({ url: menu.path })
-}
-
-const handleSubMenuClick = (subMenu: any) => {
- activeSubMenu.value = subMenu.id
- // 跳转到指定Tab(带参数)
- uni.navigateTo({ url: subMenu.path })
-}
-```
-
-#### 3. 页面参数处理
-```javascript
-// 页面Tab配置
-const tabs = ref([
- { key: 'user-list', title: '用户列表', icon: 'icon-list' },
- { key: 'user-add', title: '添加用户', icon: 'icon-add' },
- { key: 'category', title: '商品分类', icon: 'icon-category' }
-])
-
-const activeTab = ref('user-list')
-
-// 页面加载时处理参数
-onLoad((options: any) => {
- if (options && options.action) {
- if (options.action === 'add') {
- activeTab.value = 'user-add'
- showAddModal.value = true
- }
- } else if (options && options.tab) {
- if (options.tab === 'category') {
- activeTab.value = 'category'
- }
- }
-})
-```
-
-#### 4. Tab内容切换
-```vue
-
-
-
- {{ tab.title }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-```
-
-### 功能示例
-
-#### 用户管理页面
-- **用户列表Tab**: 显示用户表格、搜索、筛选、分页
-- **添加用户Tab**: 显示新增用户表单
-
-#### 商品管理页面
-- **商品列表Tab**: 商品表格管理
-- **添加商品Tab**: 商品信息表单
-- **商品分类Tab**: 分类树形管理
-
-#### 订单管理页面
-- **订单列表Tab**: 订单表格展示
-- **订单详情Tab**: 订单详细信息
-
-### URL参数映射
-
-| 页面 | 默认Tab | 参数Tab | 功能 |
-|------|---------|---------|------|
-| 用户管理 | `user-list` | `?action=add` → `user-add` | 添加用户 |
-| 商品管理 | `product-list` | `?action=add` → `product-add`
`?tab=category` → `category` | 添加商品/分类管理 |
-| 订单管理 | `order-list` | `?action=detail` → `order-detail` | 订单详情 |
-| 财务管理 | `finance-overview` | `?tab=withdrawals` → `withdrawals` | 提现管理 |
-| 系统设置 | `basic` | `?tab=security` → `security`
`?tab=email` → `email` | 安全设置/邮件设置 |
-
-### 样式实现
-
-#### Tab栏样式
-```scss
-.tab-bar {
- display: flex;
- background: #ffffff;
- border-radius: 8rpx;
- padding: 8rpx;
- margin-bottom: 24rpx;
- box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.06);
-}
-
-.tab-item {
- flex: 1;
- padding: 16rpx 24rpx;
- border-radius: 6rpx;
- cursor: pointer;
- transition: all 0.2s;
- background: #f5f5f5;
- color: #666666;
-
- &.active {
- background: #1890ff;
- color: #ffffff;
- }
-}
-```
-
----
-
-*技术栈:uni-app-x + Vue 3 + TypeScript + SCSS + ECharts*
-*设计风格:CRMEB标准版后台*
-*开发时间:完全自主开发* 🎊
\ No newline at end of file
diff --git a/mall/CRMEB_ROUTE_FIX_LOG.md b/mall/CRMEB_ROUTE_FIX_LOG.md
deleted file mode 100644
index 3bac2b2b..00000000
--- a/mall/CRMEB_ROUTE_FIX_LOG.md
+++ /dev/null
@@ -1,188 +0,0 @@
-# CRMEB 路由体系完整修复日志
-
-## 修复时间
-
-2026年2月2日
-
-## 问题分析
-
-### 1. AdminLayout.uvue 重复代码问题
-
-**现象**: `onTabClick` 等方法声明重复(第6行和第318行)
-
-**原因**: AdminLayout.uvue 中混合了新旧代码:
-
-- 新代码: CRMEB 状态驱动内部路由系统
-- 旧代码: 传统 uni.navigateTo() 页面导航系统
-- 两套代码同时存在导致方法重复声明
-
-**代码混乱片段**:
-
-```typescript
-// 新代码:正确的
-function onTabClick(tab: TabItem): void {
- openRoute(tab.id, false);
-}
-
-// 旧代码:被保留下来
-const onTabClick = (tab: TabItem) => {
- activeTabId.value = tab.id;
- go(tab.path);
-};
-```
-
-### 2. Vue Router 警告
-
-**现象**: `No match found for location with path "/pages/mall/admin/user-management?action=config"`
-
-**原因**: pages.json 中仍配置了旧的单页面 user-management,Vue Router 尝试匹配但找不到对应路由
-
-**影响**: 这是警告而非错误,不影响 CRMEB 内部路由的正常运作
-
-### 3. AdminLayout.uvue 加载失败
-
-**现象**: `GET http://localhost:5173/layouts/admin/AdminLayout.uvue?t=1770028015206&import net::ERR_ABORTED 500`
-
-**原因**: 编译器无法解析混乱的 AdminLayout.uvue(包含大量重复和冲突的代码)
-
-## 修复措施
-
-### 修复 1: 完全重写 AdminLayout.uvue
-
-**操作**: 删除旧的混乱版本,用清晰的新版本替换
-
-**新版本特点**:
-
-- ✅ 完全移除旧代码(`toggleCollapse`, `firstLeafOfMenu`, `go()`, `onMenuClick` 等)
-- ✅ 保留所有新的 CRMEB 路由函数
-- ✅ 统一的代码风格和命名规范
-- ✅ 清晰的注释和模块划分
-
-**关键改变**:
-
-```typescript
-// 删除的旧代码片段(45+ 行)
-// handlers
-const toggleCollapse = () => { ... }
-const firstLeafOfMenu = (m: MenuItem): MenuChild | null => { ... }
-let navigating = false
-const go = async (url?: string | null) => { ... }
-const onMenuClick = (menuId: string) => { ... }
-const onSubClick = (c: MenuChild) => { ... }
-const onTabClick = (tab: TabItem) => { ... } // ← 重复!
-const onTabClose = (tabId: string) => { ... }
-
-// 保留的新代码
-function onTabClick(tab: TabItem): void { ... } // ← 新版本保留
-```
-
-### 修复 2: 调整 pages.json 配置
-
-**操作**: 简化 `pages/mall/pages.json` 中的 admin 模块配置
-
-**修改前**:
-
-```json
-{
- "root": "pages/mall/admin",
- "pages": [
- { "path": "user-management", ... },
- { "path": "subscription/plan-management", ... },
- { "path": "merchant-management", ... },
- // 20+ 个旧页面
- ]
-}
-```
-
-**修改后**:
-
-```json
-{
- "root": "pages/mall/admin",
- "pages": [
- { "path": "homePage/index", ... }
- // 仅保留首页入口
- ]
-}
-```
-
-## 编译验证结果
-
-### npm run lint 输出
-
-```
-✅ 无致命编译错误
-⚠️ ESLint 警告(非阻断性):
- - vue/comment-directive: 配置相关(可忽略)
- - 旧文件中的 x-invalid-end-tag: 与新系统无关
-```
-
-### 关键文件状态
-
-| 文件 | 状态 | 说明 |
-| --------------------- | ------- | ---------------------- |
-| AdminLayout.uvue | ✅ 修复 | 清晰、无重复、编译通过 |
-| AdminAside.uvue | ✅ 正常 | 新建,无问题 |
-| AdminSubSider.uvue | ✅ 正常 | 新建,无问题 |
-| AdminHeader.uvue | ✅ 正常 | 新建,无问题 |
-| AdminTagsView.uvue | ✅ 正常 | 新建,无问题 |
-| AdminFooter.uvue | ✅ 正常 | 新建,无问题 |
-| PlaceholderPage.uvue | ✅ 正常 | 新建,无问题 |
-| adminRoutes.uts | ✅ 正常 | 新建,无问题 |
-| adminNavStore.uts | ✅ 正常 | 新建,无问题 |
-| adminComponentMap.uts | ✅ 正常 | 新建,无问题 |
-
-## 重要发现
-
-### Vue Router 与 uni-app-x 共存
-
-虽然项目最初使用了 Vue Router(从 main.uts 第18行的警告看出),但我们的 CRMEB 路由系统是完全独立的:
-
-```
-uni-app-x 项目结构
-├── Vue Router 路由(传统页面导航)
-│ └── 仅处理主要页面 (pages.json 中的全局页面)
-└── CRMEB 内部路由(新增,状态驱动)
- └── 仅在 AdminLayout 内部工作
-```
-
-**结论**: Vue Router 的警告不影响 CRMEB 系统的运作。
-
-## 已验证的功能
-
-✅ AdminLayout 组件正确编译
-✅ 所有子组件正确导入
-✅ 内部路由状态管理无冲突
-✅ 组件映射表完整
-✅ 占位页面正确工作
-
-## 后续行动
-
-### 立即可测试的
-
-1. 在 HBuilderX 中打开项目预览
-2. 点击首页侧边栏菜单,验证路由切换
-3. 检查标签页的添加/关闭功能
-4. 验证面包屑导航显示
-
-### 需要进一步处理的
-
-1. 实现实际页面内容(当前为占位组件)
-2. 实现页面缓存机制(替代 keep-alive)
-3. 添加权限检查逻辑
-
-## 技术债务清单
-
-项目中仍存在的旧文件(与新系统无关):
-
-- `pages/dashboard/UserTrendChart.uvue` - x-invalid-end-tag 错误
-- `pages/info/video-player.uvue` - x-invalid-end-tag 错误
-- 多个 `pages/info/*` 文件 - 未使用的变量
-
-这些是独立的遗留文件,不影响 CRMEB 管理端功能。
-
----
-
-**修复验证**: ✅ 完成
-**系统状态**: 🟢 就绪
-**可部署**: ✅ 是
diff --git a/mall/FINAL_COMPLETION_REPORT.md b/mall/FINAL_COMPLETION_REPORT.md
deleted file mode 100644
index 9cb3785a..00000000
--- a/mall/FINAL_COMPLETION_REPORT.md
+++ /dev/null
@@ -1,432 +0,0 @@
-# 🏁 Phase 2 重构 - 最终完成报告
-
-## 📍 会话信息
-
-**用户指令**: "继续重构"
-**会话目标**: 完成 Phase 2 的所有复杂页面重构
-**开始状态**: 37 个文件已完成(Phase 1)
-**结束状态**: 64 个文件已完成(Phase 1 + Phase 2)
-**会话耗时**: ~90 分钟
-**最后更新**: Phase 2 完成
-
----
-
-## ✅ 完成成果总览
-
-### 📊 数字指标
-
-| 指标 | 数值 | 状态 |
-| -------------------- | ------- | ---- |
-| Phase 2 完成文件数 | 27 个 | ✅ |
-| Phase 2 代码行数 | ~3,200+ | ✅ |
-| 总完成文件数 (P1+P2) | 64 个 | ✅ |
-| 项目覆盖率 | 80% | ✅ |
-| 成功率 | 100% | ✅ |
-| 零缺陷率 | 100% | ✅ |
-| 文档生成 | 8 份 | ✅ |
-
-### 🎯 目标达成
-
-#### 代码规范
-
-- ✅ 100% PascalCase → kebab-case
-- ✅ 100% 添加 TypeScript 类型
-- ✅ 100% scoped CSS 作用域
-- ✅ 100% lang="scss" 声明
-- ✅ 100% 设计变量应用
-
-#### 功能保留
-
-- ✅ 99.5% 业务逻辑完全保留
-- ✅ 100% 组件交互保留
-- ✅ 100% 事件处理保留
-- ✅ 100% 计算属性保留
-
-#### 文档完整性
-
-- ✅ 完成报告 (PHASE_2_COMPLETION_REPORT.md)
-- ✅ 快速参考 (PHASE_2_QUICK_REFERENCE.md)
-- ✅ 验证清单 (PHASE_2_VERIFICATION_CHECKLIST.md)
-- ✅ 会话总结 (SESSION_COMPLETION_SUMMARY.md)
-
----
-
-## 📦 完成的工作分解
-
-### 第 1 阶段:系统配置目录 (15 个文件)
-
-**用时**: ~20 分钟
-**成功率**: 100%
-**文件清单**:
-
-- 3x 基础配置页面 (agreement-settings, message-management, receipt-settings)
-- 6x API 配置页面 (collect, logistics, pay, sms, storage, waybill)
-- 3x 权限管理页面 (admin-list, role, permission-setting)
-- 2x 配送管理页面 (courier, freight-template)
-
-**关键完成**:
-
-- ✅ 建立模式 A(简单配置页面)的标准流程
-- ✅ 验证批量处理方法的有效性
-- ✅ 确认零破坏性变更的可行性
-
-### 第 2 阶段:客服系统目录 (5 个文件)
-
-**用时**: ~15 分钟
-**成功率**: 100%
-**特殊处理**:
-
-- 保留自定义 topbar flex 布局结构
-- 保留所有动态交互逻辑
-- 保留消息处理回调
-
-**关键完成**:
-
-- ✅ 处理有自定义结构的页面
-- ✅ 建立模式 C(复杂业务页面)基础
-- ✅ 验证 topbar 组件兼容性
-
-### 第 3 阶段:订阅管理目录 (2 个文件)
-
-**用时**: ~10 分钟
-**成功率**: 100%
-**特殊处理**:
-
-- plan-management.uvue (420行): 保留 overlay/sheet/form 复杂样式
-- user-subscriptions.uvue (331行): 保留 ActionSheet 业务逻辑
-
-**关键完成**:
-
-- ✅ 处理 300+ 行大型复杂文件
-- ✅ 保留 overlay 模态框样式逻辑
-- ✅ 解决 ActionSheet 组件集成问题
-
-### 第 4 阶段:营销功能目录 (5 个文件)
-
-**用时**: ~15 分钟
-**成功率**: 100% (经过调试)
-**特殊处理**:
-
-- marketing/points/index.uvue: 解决样式替换问题
-- marketing/signin/rule & record: 完整的简单配置页面
-
-**关键完成**:
-
-- ✅ 解决字符串精确匹配问题
-- ✅ 实现分块替换法优化
-- ✅ 处理 96 行动态路由页面
-
-### 第 5 阶段:内容与设计目录 (2 个文件)
-
-**用时**: ~5 分钟
-**成功率**: 100%
-**特殊处理**:
-
-- P2 模板的特殊转换(动态 computed 属性)
-
-**关键完成**:
-
-- ✅ 处理 P2 模板变体
-- ✅ 保留动态页面属性
-- ✅ 统一为标准规范
-
-### 第 6 阶段:仪表盘目录 (2 个文件)
-
-**用时**: ~20 分钟
-**成功率**: 100%
-**特殊处理**:
-
-- homePage/index.uvue (531行): 仪表板主页面,保留完整 KPI 逻辑和图表集成点
-- homePage/components/KpiMiniCard.uvue (188行): 组件文件,SCSS 嵌套样式处理
-
-**关键完成**:
-
-- ✅ 处理超大型仪表板文件
-- ✅ SCSS 嵌套语法精确处理
-- ✅ 保留所有图表集成接口
-
----
-
-## 🔧 技术突破
-
-### 1. 样式替换技术优化
-
-**问题**: 之前会话中 marketing/points/index.uvue 样式替换失败
-**原因分析**:
-
-- 多行样式块的精确字符串匹配困难
-- 字符编码或空白字符差异
-- 上下文不足导致匹配失败
-
-**解决方案**: 分块替换法
-
-```
-原来: 一次性替换整个
-
diff --git a/mall/components/analytics/AnalyticsBarMini.uvue b/mall/components/analytics/AnalyticsBarMini.uvue
deleted file mode 100644
index 21580e50..00000000
--- a/mall/components/analytics/AnalyticsBarMini.uvue
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/mall/components/analytics/AnalyticsComboChart.uvue b/mall/components/analytics/AnalyticsComboChart.uvue
deleted file mode 100644
index 76f5be4a..00000000
--- a/mall/components/analytics/AnalyticsComboChart.uvue
+++ /dev/null
@@ -1,246 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/mall/components/analytics/AnalyticsDateRangePicker.uvue b/mall/components/analytics/AnalyticsDateRangePicker.uvue
deleted file mode 100644
index 57e5e91c..00000000
--- a/mall/components/analytics/AnalyticsDateRangePicker.uvue
+++ /dev/null
@@ -1,129 +0,0 @@
-
-
-
- 开始日期
-
- {{ startDate || '请选择' }}
-
-
-
- 结束日期
-
- {{ endDate || '请选择' }}
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/mall/components/analytics/AnalyticsDonutChart.uvue b/mall/components/analytics/AnalyticsDonutChart.uvue
deleted file mode 100644
index a2fce1be..00000000
--- a/mall/components/analytics/AnalyticsDonutChart.uvue
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/mall/components/analytics/AnalyticsMultiLineChart.uvue b/mall/components/analytics/AnalyticsMultiLineChart.uvue
deleted file mode 100644
index b044bb4e..00000000
--- a/mall/components/analytics/AnalyticsMultiLineChart.uvue
+++ /dev/null
@@ -1,123 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/mall/components/analytics/AnalyticsPieChart.uvue b/mall/components/analytics/AnalyticsPieChart.uvue
deleted file mode 100644
index 83b3b7ef..00000000
--- a/mall/components/analytics/AnalyticsPieChart.uvue
+++ /dev/null
@@ -1,115 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/mall/components/analytics/AnalyticsRegionMap.uvue b/mall/components/analytics/AnalyticsRegionMap.uvue
deleted file mode 100644
index 6b98d489..00000000
--- a/mall/components/analytics/AnalyticsRegionMap.uvue
+++ /dev/null
@@ -1,379 +0,0 @@
-
-
-
-
- 销售地域分布
-
-
- 中国地图
-
-
- 全国地图
-
-
-
-
-
- {{ loading ? '加载中...' : '暂无数据' }}
-
-
-
-
-
-
-
-
diff --git a/mall/components/analytics/AnalyticsSidebarMenu.uvue b/mall/components/analytics/AnalyticsSidebarMenu.uvue
deleted file mode 100644
index a0d6c18b..00000000
--- a/mall/components/analytics/AnalyticsSidebarMenu.uvue
+++ /dev/null
@@ -1,435 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/mall/components/analytics/AnalyticsTopBar.uvue b/mall/components/analytics/AnalyticsTopBar.uvue
deleted file mode 100644
index 814858ed..00000000
--- a/mall/components/analytics/AnalyticsTopBar.uvue
+++ /dev/null
@@ -1,332 +0,0 @@
-
-
-
-
-
-
-
- {{ title }}
- 最后更新:{{ lastUpdateTime }}
-
-
-
-
-
- 🔄
-
-
- 🔍
-
-
- 🔔
-
-
-
- ⛶
-
-
- 📱
-
-
- crmeb demo
- ▼
-
-
- ⚙️
-
-
-
-
- ⋯
-
-
-
-
-
-
-
-
-
-
-
diff --git a/mall/components/analytics/AnalyticsUserGenderSection.uvue b/mall/components/analytics/AnalyticsUserGenderSection.uvue
deleted file mode 100644
index 41f67ab7..00000000
--- a/mall/components/analytics/AnalyticsUserGenderSection.uvue
+++ /dev/null
@@ -1,176 +0,0 @@
-
-
-
-
-
-
-
-
- 总用户数
- {{ totalUsers }}
-
-
-
-
-
-
-
-
-
diff --git a/mall/components/analytics/AnalyticsUserMapTable.uvue b/mall/components/analytics/AnalyticsUserMapTable.uvue
deleted file mode 100644
index c3a5311e..00000000
--- a/mall/components/analytics/AnalyticsUserMapTable.uvue
+++ /dev/null
@@ -1,242 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ item.name }}
- {{ item.total }}
- {{ item.newUsers }}
- {{ item.visitors }}
- {{ item.amount }}
-
-
-
-
-
-
-
-
-
-
diff --git a/mall/components/analytics/ChartCard.uvue b/mall/components/analytics/ChartCard.uvue
deleted file mode 100644
index cd35b39f..00000000
--- a/mall/components/analytics/ChartCard.uvue
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
-
- {{ title }}
- {{ desc }}
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/mall/components/analytics/KpiCard.uvue b/mall/components/analytics/KpiCard.uvue
deleted file mode 100644
index 2f144d96..00000000
--- a/mall/components/analytics/KpiCard.uvue
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
- {{ title }}
- {{ value }}
-
-
-
- {{ delta >= 0 ? '+' : '' }}{{ delta.toFixed(1) }}%
-
- {{ subtitle }}
-
-
- {{ subtitle }}
-
-
-
-
-
-
diff --git a/mall/components/analytics/PeriodTabs.uvue b/mall/components/analytics/PeriodTabs.uvue
deleted file mode 100644
index 603f4f1f..00000000
--- a/mall/components/analytics/PeriodTabs.uvue
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
- {{ it.label }}
-
-
-
-
-
-
-
diff --git a/mall/components/analytics/charts/AreaLine.uvue b/mall/components/analytics/charts/AreaLine.uvue
deleted file mode 100644
index a44bc0a5..00000000
--- a/mall/components/analytics/charts/AreaLine.uvue
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/mall/components/analytics/charts/ComboBarLine.uvue b/mall/components/analytics/charts/ComboBarLine.uvue
deleted file mode 100644
index fb5adc6f..00000000
--- a/mall/components/analytics/charts/ComboBarLine.uvue
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/mall/components/analytics/charts/DonutPie.uvue b/mall/components/analytics/charts/DonutPie.uvue
deleted file mode 100644
index a44bc0a5..00000000
--- a/mall/components/analytics/charts/DonutPie.uvue
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/mall/components/supadb/RegionSelector.uvue b/mall/components/supadb/RegionSelector.uvue
deleted file mode 100644
index ced14da8..00000000
--- a/mall/components/supadb/RegionSelector.uvue
+++ /dev/null
@@ -1,533 +0,0 @@
-
-
-
-
-
- {{ level.label }}
-
-
-
-
-
- {{ region.name }}
- /
-
-
-
-
-
-
-
-
- {{ region.name }}
-
- {{ region.children_count || 0 }} 个下级区域
- {{ region.school_count || 0 }} 所学校
-
-
- >
-
-
-
-
-
- 当前没有{{ currentLevelLabel }}级区域数据
-
-
-
-
- 加载中...
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/mall/components/supadb/SESSION_RECOVERY.md b/mall/components/supadb/SESSION_RECOVERY.md
deleted file mode 100644
index 3dd9a88d..00000000
--- a/mall/components/supadb/SESSION_RECOVERY.md
+++ /dev/null
@@ -1,41 +0,0 @@
-**Supabase 会话恢复说明(supa session recovery)**
-
-- **目的**: 说明为什么刷新后 `session` / `user` 变为 `null`,以及我在项目中做了哪些修改来改善会话恢复。
-
-- **文件变更**:
- - **`components/supadb/aksupainstance.uts`**: 统一 Supabase 实例导出,新增 `supaReady` 初始化流程。在初始化时尝试从持久化 token(`AkReq` 存储)读取 `access_token` / `refresh_token`,将 refresh token 注入到 `supa.session` 并调用 `supa.refreshSession()` 以恢复会话;保留 `ensureSupabaseReady()` 作为兼容接口。
- - **`utils/store.uts`**: 将 `import` 改为 `import supa, { supaReady }`,并在获取 session 前 `await supaReady`,确保恢复逻辑已经运行完毕。
- - **`utils/sapi.uts`**、**`pages/sense/senseDataService.uts`** 及若干页面文件: 替换对旧 `ensureSupabaseReady` 的调用,改为 `await supaReady`,并使用默认导出的 `supa` 实例。
-
-- **问题根本原因**:
- 1. 系统原先将会话信息保持在 `AkSupa.session` / `AkSupa.user`(内存)中,页面刷新或应用重启会清空内存,导致 `supa.getSession()` 返回 `null`。
- 2. 虽然 `AkReq.setToken` 将 `access_token` / `refresh_token` 持久化到 `uni` storage,但 `AkSupa` 在启动时没有读取这些持久化 token 并执行恢复/刷新流程(或未将 refresh token 注入到 `AkSupa`),因此无法重建会话。
- 3. 若 refresh token 过期或没有被正确持久化,也会导致恢复失败。
-
-- **我做的修改说明(要点)**:
- - 在 `aksupainstance.uts` 添加 `supaReady`:这是一个 Promise,模块初始化时会尝试读取 `AkReq.getRefreshToken()` / `AkReq.getToken()`;若找到 refresh token,则把其临时赋到 `supa.session`,再调用 `supa.refreshSession()` 以更新内存中的 session 和 user。
- - 在所有依赖会话的模块中,在执行数据库请求前 `await supaReady`,确保恢复尝试已完成,避免 race condition(页面刷新后立即调用 supa API 导致 401/空 session)。
- - 保留向后兼容接口 `ensureSupabaseReady()`(内部直接返回 `supaReady`)。
-
-- **如何验证(开发环境)**:
- 1. 登录并确认本地存储中有 token(通过控制台或在 uni 环境运行):
- - `uni.getStorageSync('akreq_access_token')`
- - `uni.getStorageSync('akreq_refresh_token')`
- 2. 刷新页面或重启应用,打开控制台查找初始化日志或错误(`Supabase instance init failed` 等)。
- 3. 在页面中(例如 `pages/mall/delivery/index.uvue`)查看已有的调试输出:search `supa session=` 的 console 日志,应显示非 null session(若 refresh 成功)。
- 4. 若恢复失败,请检查后端 refresh 接口是否返回 200,以及 refresh token 是否已过期。
-
-- **后续建议(可选)**:
- - 在 `AkSupa.signIn` / `refreshSession` 成功时,将完整 session(或至少 `refresh_token`)写入 `uni.setStorageSync`(持久化),并在 `signOut` 时清除,这样可以进一步减少恢复失败的情况。
- - 将 `supa.session` 的 JSON 快照也写入 storage(作为额外冗余),并在 init 时尝试直接恢复(注意安全和敏感信息保护)。
- - 增加更详细的日志(成功/失败原因),并在 UI 层对“登录过期”做更友好的提示或自动跳转到登录页。
-
-- **注意事项**:
- - 切勿在代码中硬编码匿名 key 或生产密钥;请在 `ak/config.uts` 中正确配置 `SUPA_URL` 和 `SUPA_KEY`。
- - refresh token 本身也是敏感凭证,应妥善保管;如需长期保持登录,建议使用 refresh 流程并合理设置过期与刷新策略。
-
-如果你需要,我可以继续:
-- 在 `AkSupa` 中实现“登录后持久化 session JSON”的补丁,并在 `signOut` 时清理;
-- 或添加更详细的调试输出帮助定位某次具体恢复失败的 HTTP 请求和响应。
-
-文件路径:components/supadb/SESSION_RECOVERY.md
diff --git a/mall/components/supadb/aksupa - 副本.uts b/mall/components/supadb/aksupa - 副本.uts
deleted file mode 100644
index 4b150698..00000000
--- a/mall/components/supadb/aksupa - 副本.uts
+++ /dev/null
@@ -1,1027 +0,0 @@
-import { AkReqResponse, AkReqUploadOptions, AkReq } from '@/uni_modules/ak-req/index.uts'
-import type { AkReqOptions } from '@/uni_modules/ak-req/index.uts'
-import { toUniError } from '@/utils/utils.uts'
-
-export type AkSupaSignInResult = {
- access_token : string;
- refresh_token : string;
- expires_at : number;
- user : UTSJSONObject | null;
- token_type ?: string;
- expires_in ?: number;
- raw : UTSJSONObject;
-}
-
-// Count 选项枚举
-export type CountOption = 'exact' | 'planned' | 'estimated';
-
-// 定义查询选项类型,兼容 UTS
-export type AkSupaSelectOptions = {
- limit ?: number;
- order ?: string;
- getcount ?: string; // 保持向后兼容
- count ?: CountOption; // 新增:更清晰的 count 选项
- head ?: boolean; // 新增:head 模式,只返回元数据
- columns ?: string;
- single ?: boolean; // 新增,支持 single-object
- rangeFrom ?: number; // 新增:range 分页起始位置
- rangeTo ?: number; // 新增:range 分页结束位置
-};
-
-// 新增:order方法参数类型
-export type OrderOptions = {
- ascending ?: boolean;
-};
-
-// 新增类型定义,便于 getSession 返回类型复用
-export type AkSupaSessionInfo = {
- session : AkSupaSignInResult | null;
- user : UTSJSONObject | null;
-};
-
-// 链式请求构建器
-export class AkSupaQueryBuilder {
- private _supa : AkSupa;
- private _table : string;
- private _filter : UTSJSONObject | null = null;
- private _options : AkSupaSelectOptions = {};
- private _values : UTSJSONObject | Array | null = null;
- private _single : boolean = false;
- private _conditions : any[] = [];
- private _nextLogic : string = 'and';
- // 新增:记录当前操作类型
- private _action : 'select' | 'insert' | 'update' | 'delete' | 'rpc' | null = null;
- private _orString : string | null = null; // 新增:支持 or 字符串
- private _rpcFunction : string | null = null;
- private _rpcParams : UTSJSONObject | null = null;
- private _page : number = 1; // 新增:当前页码
-
- constructor(supa : AkSupa, table : string) {
- this._supa = supa;
- this._table = table;
- }
-
- // 链式条件方法
- eq(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'eq', value); }
- neq(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'neq', value); }
- gt(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'gt', value); }
- gte(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'gte', value); }
- lt(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'lt', value); }
- lte(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'lte', value); }
- like(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'like', value); }
- ilike(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'ilike', value); }
- in(field : string, value : any[]) : AkSupaQueryBuilder { return this._addCond(field, 'in', value); }
- is(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'is', value); }
- contains(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'cs', value); }
- containedBy(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'cd', value); }
- not(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'not', value); }
-
- and() : AkSupaQueryBuilder { this._nextLogic = 'and'; return this; }
- or(str ?: string) : AkSupaQueryBuilder {
- if (typeof str == 'string') {
- this._orString = str;
- } else {
- this._nextLogic = 'or';
- }
- return this;
- }
-
- private _addCond(field : string, op : string, value : any) : AkSupaQueryBuilder {
- console.log('add cond:', op, field, value)
- const afield =encodeURIComponent(field)
- this._conditions.push({field:afield , op, value, logic: this._nextLogic });
- console.log(this._conditions)
- this._nextLogic = 'and';
- return this;
- }
-
- // 支持原有 where 方式
- where(filter : UTSJSONObject) : AkSupaQueryBuilder {
- this._filter = filter;
- return this;
- }
-
- page(page : number) : AkSupaQueryBuilder {
- this._page = page;
- // 如果已设置 limit,则自动设置 range
- let limit = 0;
- if (typeof this._options.limit == 'number') {
- limit = this._options.limit ?? 0;
- }
- if (limit > 0) {
- const from = (page - 1) * limit;
- const to = from + limit - 1;
- this.range(from, to);
- }
- return this;
- }
- limit(limit : number) : AkSupaQueryBuilder {
- this._options.limit = limit;
- // 总是为 limit 设置对应的 range,确保限制生效
- const from = (this._page - 1) * limit;
- const to = from + limit - 1;
- this.range(from, to);
- return this;
- }
-
- order(order : string, options ?: OrderOptions) : AkSupaQueryBuilder {
- if (options != null && options.ascending == false) {
- this._options.order = order + '.desc';
- } else {
- this._options.order = order + '.asc';
- }
- return this;
- }
- columns(columns : string) : AkSupaQueryBuilder {
- this._options.columns = columns;
- return this;
- }
-
- // 新增:专门的 count 方法
- count(option : CountOption = 'exact') : AkSupaQueryBuilder {
- this._options.count = option;
- this._options.head = true; // count 操作默认使用 head 模式
- return this;
- }
-
- // 新增:便捷的 count 方法
- countExact() : AkSupaQueryBuilder {
- return this.count('exact');
- }
-
- countEstimated() : AkSupaQueryBuilder {
- return this.count('estimated');
- }
-
- countPlanned() : AkSupaQueryBuilder {
- return this.count('planned');
- }
-
- // 新增:head 模式方法
- head(enable : boolean = true) : AkSupaQueryBuilder {
- this._options.head = enable;
- return this;
- }
-
- values(values : UTSJSONObject) : AkSupaQueryBuilder {
- this._values = values;
- return this;
- }
- single() : AkSupaQueryBuilder {
- this._single = true;
- return this;
- }
- range(from : number, to : number) : AkSupaQueryBuilder {
- this._options.rangeFrom = from;
- this._options.rangeTo = to;
- console.log('设置 range:', from, 'to', to);
- return this;
- }
-
- // 将 _conditions 转换为 Supabase/PostgREST 兼容 filter
- private _buildFilter() : UTSJSONObject | null {
- console.log(this._conditions, this._filter)
- if (this._conditions.length == 0 && (this._orString == null || this._orString == "")) return this._filter;
- let ands = new UTSJSONObject();
- let ors : UTSJSONObject[] = [];
- for (let i = 0; i < this._conditions.length; i++) {
- // console.log('filters 1')
- const c = this._conditions[i] as UTSJSONObject;
- const logic = c.get("logic");
- const field = c.get("field");
- const op = c.get("op");
- const value = c.get("value");
- console.log('filters 2', value)
- if (logic == "or") {
- let obj = new UTSJSONObject();
- let opObj = new UTSJSONObject();
- opObj.set(op as string, value);
- obj.set(field as string, opObj);
- ors.push(obj);
- } else {
- console.log('filters 3', ands, field)
- const fieldObj = ands.get(field as string);
- console.log(ands.getString(field))
- console.log(ands.getString('translations.language_code'))
- console.log('filters 4',fieldObj)
- if (fieldObj != null) {
- (fieldObj as UTSJSONObject).set(op as string, value);
- }
- else {
- let newfieldObj = new UTSJSONObject();
- newfieldObj.set(op as string, value);
- console.log(newfieldObj)
- console.log(field)
- ands.set(field as string, newfieldObj);
- }
- }
- }
- // console.log('filters 1')
-
- let filterObj = new UTSJSONObject();
- UTSJSONObject.keys(ands).forEach(k => {
- filterObj.set(k, ands.get(k));
- });
- console.log(ands.getString('translations.language_code'))
- console.log('filters 2',filterObj,ands)
- if (ors.length > 0) {
- let orStr = ors.map(o => {
- const keys = UTSJSONObject.keys(o);
- const k = keys.length > 0 ? keys[0] : "";
- console.log('ak:', o.get(k))
- const v = o.get(k) as UTSJSONObject;
- const op = UTSJSONObject.keys(v);
- const val = v.get(op[0]);
- if (op[0] == "in" && Array.isArray(val)) {
- return `${k}.in.(${val.map((x) => encodeURIComponent(x as string)).join(",")})`;
- }
- if (op[0] == "is" && (val == null)) {
- return `${k}.is.null`;
- }
- return `${k}.${op}.${encodeURIComponent(val as string)}`;
- }).join(",");
- filterObj.set("or", orStr);
- }
- if (this._orString != null && this._orString != "") {
- filterObj.set("or", encodeURIComponent(this._orString!));
- }
- return filterObj;
- }
- select(columns ?: string, opt ?: UTSJSONObject) : AkSupaQueryBuilder {
- this._action = 'select';
- if (columns != null) {
- this._options.columns = columns;
- }
- if (opt != null) {
- // 合并 opt 到 this._options
- Object.assign(this._options, opt);
- }
- return this;
- }
- insert(values : UTSJSONObject | Array) : AkSupaQueryBuilder {
- this._action = 'insert';
- // 检查是否为空
- if (Array.isArray(values)) {
- if (values.length === 0) throw toUniError('No values set for insert', 'Insert操作缺少数据');
- } else {
- if (UTSJSONObject.keys(values).length === 0) throw toUniError('No values set for insert', 'Insert操作缺少数据');
- }
- this._values = values;
- return this;
- }
- update(values : UTSJSONObject) : AkSupaQueryBuilder {
- this._action = 'update';
- console.log('ak update', this._action)
- if (UTSJSONObject.keys(values).length == 0) throw toUniError('No values set for update', '更新操作缺少数据');
- this._values = values;
- console.log('ak update', values)
- return this;
- }
- delete() : AkSupaQueryBuilder {
- this._action = 'delete';
- console.log('delete action now')
- const filter = this._buildFilter();
- console.log(filter)
- if (filter == null) throw toUniError('No filter set for delete', '删除操作缺少筛选条件');
- console.log('delete action')
- return this;
- }
-
- rpc(functionName : string, params ?: UTSJSONObject) : AkSupaQueryBuilder {
- this._action = 'rpc';
- this._rpcFunction = functionName;
- this._rpcParams = params;
- return this;
- }
- // 链式请求最终执行方法 - 返回 UTSJSONObject
- async execute() : Promise> {
- console.log('execute')
- const filter = this._buildFilter();
- console.log('execute', filter)
- let res : any;
- switch (this._action) {
- case 'select': {
- // 传递 single 状态到 options
- if (this._single) {
- this._options.single = true;
- // 如果是 single 请求,自动设置 limit 为 1
- if (this._options.limit == null) {
- this._options.limit = 1;
- }
- console.log(this._options)
- } // 保证分页统计
- if (this._options.limit != null) {
- if (this._options.getcount == null && this._options.count == null) {
- this._options.count = 'exact'; // 优先使用新的 count 选项
- }
- }
- res = await this._supa.select(this._table, filter, this._options);
- // 解析 content-range header
- let total = 0;
- let hasmore = false;
- const page = this._page;
- let resdata = res.data
- let limit = 0;
- if (typeof this._options.limit == 'number') {
- limit = this._options.limit ?? 0;
- } else if (Array.isArray(resdata)) {
- limit = resdata.length;
- }
- let contentRange : string | null = null;
- if (res.headers != null) {
- let theheader = res.headers as UTSJSONObject
- if (typeof theheader.get === 'function') {
-
- contentRange = theheader.get('content-range') as string | null;
- } else if (typeof theheader['content-range'] === 'string') {
- contentRange = theheader['content-range'] as string;
- }
- }
- if (contentRange != null) {
- const match = /\/(\d+)$/.exec(contentRange);
- if (match != null) {
- total = parseInt(match[1] ?? "0");
- hasmore = (page * limit) < total;
- }
- }
- if (total == 0) {
- if (typeof res['count'] == 'number') {
- total = res['count'] as number ?? 0;
- } else if (Array.isArray(resdata)) {
- total = resdata.length;
- } else {
- total = 0;
- }
- }
- if (!hasmore) hasmore = (page * limit) < total; // 如果是 head 模式,只返回 count 信息
- if (this._options.head == true) {
- return {
- data: null, // head 模式不返回数据
- total,
- page,
- limit,
- hasmore: false, // head 模式不需要分页信息
- origin: res,
- status: res.status,
- headers: res.headers,
- error: res.error
- } as AkReqResponse;
- }
-
- return {
- data: res.data,
- total,
- page,
- limit,
- hasmore,
- origin: res,
- status: res.status,
- headers: res.headers,
- error: res.error
- } as AkReqResponse;
- }
- case 'insert': {
- const insertValues = this._values;
- if (insertValues == null) throw toUniError('No values set for insert', '插入操作缺少数据');
- res = await this._supa.insert(this._table, insertValues);
- break;
- } case 'update': {
- const updateValues = this._values;
- if (updateValues == null) throw toUniError('No values set for update', '更新操作缺少数据');
- if (filter == null) throw toUniError('No filter set for update', '更新操作缺少筛选条件');
- // Update操作只支持单个对象,不支持数组
- if (Array.isArray(updateValues)) throw toUniError('Update does not support array values', '更新操作不支持数组数据');
- res = await this._supa.update(this._table, filter, updateValues as UTSJSONObject);
- break;
- }
- case 'delete': {
- if (filter == null) throw toUniError('No filter set for delete', '删除操作缺少筛选条件');
- res = await this._supa.delete(this._table, filter);
- break;
- }
- case 'rpc': {
- if (this._rpcFunction == null) throw toUniError('No RPC function specified', 'RPC调用缺少函数名');
- res = await this._supa.rpc(this._rpcFunction as string, this._rpcParams);
- break;
- }
- default: {
- res = await this._supa.select(this._table, filter, this._options);
- }
- }
- // 保证 data 字段存在(不能赋null,赋空对象或空字符串)
- if (res["data"] == null) res["data"] = {};
- return res;
- } // 新增:支持类型转换的执行方法
- async executeAs() : Promise>> {
- const result = await this.execute();
-
- // 如果原始 data 是 null,直接返回 null
- if (result.data == null) {
- const aaa = {
- status: result.status,
- data: null,
- headers: result.headers,
- error: result.error,
- total: result.total,
- page: result.page,
- limit: result.limit,
- hasmore: result.hasmore,
- origin: result.origin
- }
- return aaa;
- }
-
- // 尝试类型转换
- let convertedData : T | Array | null = null;
-
- try {
- if (Array.isArray(result.data)) {
- // 处理数组数据
- const dataArray = result.data;
- const convertedArray : Array = [];
- console.log(convertedArray)
- for (let i = 0; i < dataArray.length; i++) {
- const item = dataArray[i];
- if (item instanceof UTSJSONObject) {
- // #ifdef APP-ANDROID
- // console.log(item)
- const parsed = item.parse();
- // console.log('ak parsed')
- // #endif
- // #ifndef APP-ANDROID
- const parsed = item as T;
- // #endif
- if (parsed != null) {
- convertedArray.push(parsed);
- } else {
- console.warn('转换失败,使用原始对象:', item);
- convertedArray.push(item as T);
- }
- } else {
- // 将普通对象转换为 UTSJSONObject 后再 parse
- const jsonObj = new UTSJSONObject(item);
- // #ifdef APP-ANDROID
- const parsed = jsonObj.parse();
- // #endif
- // #ifndef APP-ANDROID
- const parsed = jsonObj as T;
- // #endif
- if (parsed != null) {
- convertedArray.push(parsed);
- }
- else {
- console.warn('转换失败,使用原始对象:', item);
- convertedArray.push(item as T);
- }
- }
- }
- convertedData = convertedArray;
-
- } else {
- // 处理单个对象
- const convertedArray : Array = [];
- if (result.data instanceof UTSJSONObject) {
- const parsed = result.data.parse();
-
- if (parsed != null) {
- convertedArray.push(parsed);
- }
- else {
- console.log('转换失败:', result.data)
- }
- } else {
- const jsonObj = new UTSJSONObject(result.data);
- const parsed = jsonObj.parse();
- if (parsed != null) {
- convertedArray.push(parsed);
- }
- else {
- console.log('转换失败:', result.data)
- }
- }
- convertedData = convertedArray;
- }
- } catch (e) {
- console.warn('数据类型转换失败,使用原始数据:', e);
- // 转换失败时,使用原始数据
- convertedData = result.data as T | Array;
- }
- result.data = convertedData
- const aaa = result as AkReqResponse
- // const aaa = {
- // status: result.status,
- // data: convertedData,
- // headers: result.headers,
- // error: result.error,
- // total: result.total,
- // page: result.page,
- // limit: result.limit,
- // hasmore: result.hasmore,
- // origin: result.origin
- // }
- return aaa;
-
- }
-}
-
-// 新增:链式 Storage 上传
-export class AkSupaStorageUploadBuilder {
- private _supa : AkSupa;
- private _bucket : string = '';
- private _path : string = '';
- private _file : any = null;
- private _options : UTSJSONObject = {};
-
- constructor(supa : AkSupa, bucket : string) {
- this._supa = supa;
- this._bucket = bucket;
- }
-
- path(path : string) : AkSupaStorageUploadBuilder {
- this._path = path;
- return this;
- }
-
- file(file : any) : AkSupaStorageUploadBuilder {
- this._file = file;
- return this;
- }
-
- options(options : UTSJSONObject) : AkSupaStorageUploadBuilder {
- this._options = options;
- return this;
- }
- async upload() : Promise> {
- if (!this._bucket || !this._path || !this._file) {
- throw toUniError('bucket, path, file are required', '上传文件缺少必要参数');
- }
- const url = `${this._supa.baseUrl}/storage/v1/object/${this._bucket}/${this._path}`;
- const apikey = this._supa.apikey;
- // 适配 uni.uploadFile
- const uploadOptions : AkReqUploadOptions = {
- url,
- filePath: this._file, // 这里假设 file 是本地路径
- name: 'file', // 默认字段名
- headers: {},
- apikey,
- formData: this._options
- };
- return await AkReq.upload(uploadOptions);
- }
-}
-
-// 新增:明确的 StorageBucket 类,支持链式 upload
-class AkSupaStorageBucket {
- private supa : AkSupa;
- private bucket : string;
- constructor(supa : AkSupa, bucket : string) {
- this.supa = supa;
- this.bucket = bucket;
- }
- async upload(path : string, filePath : string, options ?: UTSJSONObject) : Promise> {
- const url = `${this.supa.baseUrl}/storage/v1/object/${this.bucket}/${path}`;
- let headers : UTSJSONObject = { apikey: this.supa.apikey };
- const formData : UTSJSONObject = {};
- if (options != null && typeof options == 'object') {
- if (typeof options.get == 'function' && options.get('x-upsert') != null) {
- headers['x-upsert'] = options.get('x-upsert');
- }
- const keys = UTSJSONObject.keys(options);
- for (let i = 0; i < keys.length; i++) {
- const k = keys[i];
- if (k != 'x-upsert') formData[k] = options.get(k);
- }
- }
- const token = AkReq.getToken();
- if (token != null && !(token == '')) {
- headers['Authorization'] = `Bearer ${token}`;
- }
- return await AkReq.upload({
- url,
- filePath,
- name: 'file',
- apikey: this.supa.apikey,
- formData,
- headers
- });
- }
-}
-
-export class AkSupaStorageApi {
- private _supa : AkSupa;
- constructor(supa : AkSupa) {
- this._supa = supa;
- }
- from(bucket : string) : AkSupaStorageBucket {
- return new AkSupaStorageBucket(this._supa, bucket);
- }
-}
-
-export class AkSupa {
- baseUrl : string;
- apikey : string;
- session : AkSupaSignInResult | null = null;
- user : UTSJSONObject | null = null;
- storage : AkSupaStorageApi;
-
- constructor(baseUrl : string, apikey : string) {
- this.baseUrl = baseUrl;
- this.apikey = apikey;
- this.storage = new AkSupaStorageApi(this);
- }
-
- async resetPassword(email : string) : Promise {
- const res = await AkReq.request({
- url: this.baseUrl + '/auth/v1/recover',
- method: 'POST',
- headers: {
- apikey: this.apikey,
- 'Content-Type': 'application/json'
- } as UTSJSONObject,
- data: { email } as UTSJSONObject,
- contentType: 'application/json'
- }, false);
-
- // Supabase returns 200 when the reset email is sent successfully
- return res.status == 200;
- }
- async signOut() {
- this.session = null
- this.user = null
- }
- async signIn(email : string, password : string) : Promise {
- const res = await AkReq.request({
- url: this.baseUrl + '/auth/v1/token?grant_type=password',
- method: 'POST',
- headers: {
- apikey: this.apikey,
- 'Content-Type': 'application/json'
- } as UTSJSONObject,
- data: { email, password } as UTSJSONObject,
- contentType: 'application/json'
- }, false);
- console.log(res)
- const data = new UTSJSONObject(res.data); // 修正:确保data为UTSJSONObject
- const access_token = data.getString('access_token') ?? '';
- const refresh_token = data.getString('refresh_token') ?? '';
- const expires_at = data.getNumber('expires_at') ?? 0;
- const user = data.getJSON('user');
- console.log(user, data)
- const session : AkSupaSignInResult = {
- access_token: access_token,
- refresh_token: refresh_token,
- expires_at: expires_at,
- user: user,
- token_type: data.getString('token_type') ?? '',
- expires_in: data.getNumber('expires_in') ?? 0,
- raw: data
- };
- this.session = session;
- this.user = user;
- console.log(this.user)
- return session;
- }
-
- /**
- * 获取当前 session 和 user
- */
- getSession() : AkSupaSessionInfo {
- return {
- session: this.session,
- user: this.user
- };
- }
-
- async signUp(email : string, password : string) : Promise {
- const res = await AkReq.request({
- url: this.baseUrl + '/auth/v1/signup',
- method: 'POST',
- headers: {
- apikey: this.apikey,
- 'Content-Type': 'application/json'
- } as UTSJSONObject,
- data: { email, password } as UTSJSONObject,
- contentType: 'application/json'
- }, false);
- return res.data as UTSJSONObject;
- }
-
- /**
- * 查询表数据(GET方式,支持多条件、limit等,filter自动转为supabase风格query)
- * filter 支持:
- * { usr_id: { lt: 800 }, name: { ilike: '%foo%' }, status: 'active', age: { gte: 18, lte: 30 } }
- * 操作符支持 eq, neq, lt, lte, gt, gte, like, ilike, in, is, not, contains, containedBy, range, fts, plfts, phfts, wfts
- */
- async select(table : string, filter ?: UTSJSONObject, options ?: AkSupaSelectOptions) : Promise> {
- let url = this.baseUrl + '/rest/v1/' + table;
- let headers = {
- apikey: this.apikey,
- 'Content-Type': 'application/json',
- Authorization: `Bearer ${AkReq.getToken() ?? ''}`
- } as UTSJSONObject;
- let params : string[] = []; if (options != null) {
- if (options.columns != null && !(options.columns == "")) params.push('select=' + encodeURIComponent(options.columns ?? ""));
- if (options.limit != null) {
- params.push('limit=' + options.limit);
- console.log('设置 limit 参数:', options.limit);
- }
- if (options.order != null && !(options.order == "")) params.push('order=' + encodeURIComponent(options.order ?? ""));
- if (options.rangeFrom != null && options.rangeTo != null) {
- headers['Range'] = `${options.rangeFrom}-${options.rangeTo}`;
- headers['Range-Unit'] = 'items';
- console.log('设置 Range 头部:', `${options.rangeFrom}-${options.rangeTo}`);
- }
-
- // 向后兼容:支持旧的 getcount 参数
- let countOption = options.count ?? options.getcount;
- if (countOption != null) {
- headers['Prefer'] = `count=${countOption}`;
- }
- // 新增:head 模式支持
- if (options.head == true) {
- console.log('使用 head 模式,只返回元数据');
- // HEAD 请求用于只获取 count,不返回数据
- if (headers['Prefer'] != null) {
- headers['Prefer'] = (headers['Prefer'] as string) + ',return=minimal';
- } else {
- headers['Prefer'] = 'return=minimal';
- }
- }
-
- if (options.single == true) {
- console.log('使用 single() 模式');
- if (headers['Prefer'] != null) {
- headers['Prefer'] = (headers['Prefer'] as string) + ',return=representation,single-object';
- } else {
- headers['Prefer'] = 'return=representation,single-object';
- }
- }
- } else {
- params.push('select=*');
- }
- console.log(filter)
- try {
- const filterStr = buildSupabaseFilterQuery(filter);
- console.log(filterStr)
- if (filterStr != "") params.push(filterStr);
- if (params.length > 0) {
- url += '?' + params.join('&');
- }
- } catch (err) {
- console.log(err)
- }
-
- console.log(url)
-
- // 确定HTTP方法:如果是head模式,使用HEAD方法
- let httpMethod = 'GET';
- if (options != null && options.head == true) {
- httpMethod = 'HEAD';
- console.log('使用 HEAD 方法进行 count 查询');
- }
-
- let reqOptions : AkReqOptions = {
- url,
- method: httpMethod,
- headers
- };
- return await this.requestWithAutoRefresh(reqOptions);
- }
-
- /**
- * 插入表数据
- * @param table 表名
- * @param row 插入对象
- * @returns 插入结果
- */
- async insert(table : string, row : UTSJSONObject | Array) : Promise> {
- const url = this.baseUrl + '/rest/v1/' + table;
- const headers = {
- apikey: this.apikey,
- 'Content-Type': 'application/json',
- Authorization: `Bearer ${AkReq.getToken() ?? ''}`,
- Prefer: 'return=representation'
- } as UTSJSONObject;
-
- // 如果是数组,直接传递;如果是单个对象,也直接传递
- // Supabase REST API 原生支持两种格式
- let reqOptions : AkReqOptions = {
- url,
- method: 'POST',
- headers,
- data: row, // 可以是单个对象或数组
- contentType: 'application/json'
- };
- return await this.requestWithAutoRefresh(reqOptions);
- }
-
- /**
- * 更新表数据
- * @param table 表名
- * @param filter 过滤条件对象
- * @param values 更新内容对象
- * @returns 更新结果
- */
- async update(table : string, filter : UTSJSONObject, values : UTSJSONObject) : Promise> {
- let url = this.baseUrl + '/rest/v1/' + table;
- const filterStr = buildSupabaseFilterQuery(filter);
- if (filterStr != "") {
- url += '?' + filterStr;
- }
- const headers = {
- apikey: this.apikey,
- 'Content-Type': 'application/json',
- Authorization: `Bearer ${AkReq.getToken() ?? ''}`,
- Prefer: 'return=representation'
- } as UTSJSONObject;
- let reqOptions : AkReqOptions = {
- url,
- method: 'PATCH',
- headers,
- data: values,
- contentType: 'application/json'
- };
- return await this.requestWithAutoRefresh(reqOptions);
- }
-
- /**
- * 删除表数据
- * @param table 表名
- * @param filter 过滤条件对象
- * @returns 删除结果
- */
- async delete(table : string, filter : UTSJSONObject) : Promise> {
- let url = this.baseUrl + '/rest/v1/' + table;
- const filterStr = buildSupabaseFilterQuery(filter);
- if (filterStr != "") {
- url += '?' + filterStr;
- }
- const headers = {
- apikey: this.apikey,
- 'Content-Type': 'application/json',
- Authorization: `Bearer ${AkReq.getToken() ?? ''}`,
- Prefer: 'return=representation'
- } as UTSJSONObject;
- let reqOptions : AkReqOptions = {
- url,
- method: 'DELETE',
- headers,
- contentType: 'application/json'
- };
- return await this.requestWithAutoRefresh(reqOptions);
- }
-
- /**
- * 调用 Supabase/PostgREST RPC (function)
- * @param functionName 函数名
- * @param params 参数对象
- * @returns AkReqResponse
- */
- async rpc(functionName : string, params ?: UTSJSONObject) : Promise> {
- const url = `${this.baseUrl}/rest/v1/rpc/${functionName}`;
- const headers = {
- apikey: this.apikey,
- 'Content-Type': 'application/json',
- Authorization: `Bearer ${AkReq.getToken() ?? ''}`
- } as UTSJSONObject;
- let reqOptions : AkReqOptions = {
- url,
- method: 'POST',
- headers,
- data: params ?? {},
- contentType: 'application/json'
- };
- return await this.requestWithAutoRefresh(reqOptions);
- }
- /**
- * 兼容 supabase-js 风格
- * @param tableName 表名
- */
- from(tableName : string) : AkSupaQueryBuilder {
- return new AkSupaQueryBuilder(this, tableName);
- }
- // AkSupa类内新增:自动刷新session
- async refreshSession() : Promise {
- if (this.session == null || this.session?.refresh_token == null) return false;
- try {
- const res = await AkReq.request({
- url: this.baseUrl + '/auth/v1/token?grant_type=refresh_token',
- method: 'POST',
- headers: {
- apikey: this.apikey,
- 'Content-Type': 'application/json'
- } as UTSJSONObject,
- data: { refresh_token: this.session?.refresh_token } as UTSJSONObject,
- contentType: 'application/json'
- }, false);
- if (res.status == 200 && (res.data != null)) {
- const data = res.data as UTSJSONObject;
- const access_token = data.getString('access_token') ?? '';
- const refresh_token = data.getString('refresh_token') ?? '';
- const expires_at = data.getNumber('expires_at') ?? 0;
- const user = data.getJSON('user');
- this.session = {
- access_token,
- refresh_token,
- expires_at,
- user,
- token_type: data.getString('token_type') ?? '',
- expires_in: data.getNumber('expires_in') ?? 0,
- raw: data
- };
- this.user = user;
- // 更新本地token
- AkReq.setToken(access_token, refresh_token, expires_at);
- return true;
- }
- return false;
- } catch (e) {
- return false;
- }
- }
-
- // AkSupa类内新增:自动刷新封装
- async requestWithAutoRefresh(reqOptions : AkReqOptions, isRetry = false) : Promise> {
- let res = await AkReq.request(reqOptions, false);
- // JWT过期:Supabase风格
- const isJwtExpired = (res.status == 401); //res != null && res.data != null && typeof res.data == 'object' && (res.data as UTSJSONObject)?.getString('code') == 'PGRST301';
- // 401未授权
- const isUnauthorized = (res.status == 401);
- if ((isJwtExpired || isUnauthorized) && !isRetry) {
- const ok = await this.refreshSession();
- if (ok) {
- let headers = reqOptions.headers
- if (headers == null) {
- headers = new UTSJSONObject()
- }
- if (typeof headers.set == 'function') {
- headers.set('Authorization', `Bearer ${AkReq.getToken() ?? ''}`)
- reqOptions.headers = headers
- }
-
- res = await AkReq.request(reqOptions, false);
- } else {
- uni.removeStorageSync('user_id');
- uni.removeStorageSync('token');
-
- uni.reLaunch({ url: '/pages/user/login' });
- throw toUniError('登录已过期,请重新登录', '用户认证失败');
- }
- }
- return res;
- }
-}
-
-// 工具函数:将 UTSJSONObject filter 转为 Supabase/PostgREST 查询字符串
-function buildSupabaseFilterQuery(filter : UTSJSONObject | null) : string {
- console.log(filter)
- if (filter == null) return "";
- // 类型保护:如果不是 UTSJSONObject,自动包裹
- if (typeof filter.get !== 'function') {
- try {
- filter = new UTSJSONObject(filter as any)
- } catch (e) {
- console.warn('filter 不是 UTSJSONObject,且无法转换', filter)
- return ''
- }
- }
- const params : string[] = [];
- const keys : string[] = UTSJSONObject.keys(filter);
- for (let i = 0; i < keys.length; i++) {
- const k = keys[i];
- const v = filter.get(k);
- if (k == 'or' && typeof v == 'string') {
- params.push(`or=(${v})`);
- continue;
- }
- if (v != null && typeof v == 'object' && typeof (v as UTSJSONObject).get == 'function') {
- const vObj = v as UTSJSONObject;
- const opKeys = UTSJSONObject.keys(vObj);
- for (let j = 0; j < opKeys.length; j++) {
- const op = opKeys[j];
- const opVal = vObj.get(op);
- if ((op == 'in' || op == 'not.in') && Array.isArray(opVal)) {
- params.push(`${k}=${op}.(${opVal.map(x => typeof x == 'object' ? encodeURIComponent(JSON.stringify(x)) : encodeURIComponent(x.toString())).join(',')})`);
- } else if (op == 'is' && (opVal == null || opVal == 'null')) {
- params.push(`${k}=is.null`);
- } else {
- const opvalstr : string = (typeof opVal == 'object') ? JSON.stringify(opVal) : (opVal as string);
- params.push(`${k}=${op}.${encodeURIComponent(opvalstr)}`);
- }
- }
- } else if (v != null && typeof v == 'object') {
- const vObj = v as UTSJSONObject;
- const opKeys = UTSJSONObject.keys(vObj);
- for (let j = 0; j < opKeys.length; j++) {
- const op = opKeys[j];
- const opVal = vObj.get(op);
- params.push(`${k}=${op}.${encodeURIComponent(!(opVal == null) ? (typeof opVal == 'object' ? JSON.stringify(opVal) : opVal.toString()) : '')}`);
- }
- } else {
- params.push(`${k}=eq.${encodeURIComponent(!(v == null) ? v.toString() : '')}`);
- }
- }
- return params.join('&');
-}
-
-export default AkSupa;
\ No newline at end of file
diff --git a/mall/components/supadb/aksupa.uts b/mall/components/supadb/aksupa.uts
deleted file mode 100644
index 80255cf6..00000000
--- a/mall/components/supadb/aksupa.uts
+++ /dev/null
@@ -1,1136 +0,0 @@
-import { AkReqResponse, AkReqUploadOptions, AkReq } from '@/uni_modules/ak-req/index.uts'
-import type { AkReqOptions } from '@/uni_modules/ak-req/index.uts'
-import { toUniError } from '@/utils/utils.uts'
-
-export type AkSupaSignInResult = {
- access_token : string;
- refresh_token : string;
- expires_at : number;
- user : UTSJSONObject | null;
- token_type ?: string;
- expires_in ?: number;
- raw : UTSJSONObject;
-}
-
-// Count 选项枚举
-export type CountOption = 'exact' | 'planned' | 'estimated';
-
-// 定义查询选项类型,兼容 UTS
-export type AkSupaSelectOptions = {
- limit ?: number;
- order ?: string;
- getcount ?: string; // 保持向后兼容
- count ?: CountOption; // 新增:更清晰的 count 选项
- head ?: boolean; // 新增:head 模式,只返回元数据
- columns ?: string;
- single ?: boolean; // 新增,支持 single-object
- rangeFrom ?: number; // 新增:range 分页起始位置
- rangeTo ?: number; // 新增:range 分页结束位置
-};
-
-// 新增:order方法参数类型
-export type OrderOptions = {
- ascending ?: boolean;
-};
-
-// 新增类型定义,便于 getSession 返回类型复用
-export type AkSupaSessionInfo = {
- session : AkSupaSignInResult | null;
- user : UTSJSONObject | null;
-};
-
-// 链式请求构建器
-// 强类型条件定义
-type AkSupaCondition = {
- field : string; // 已经 encodeURIComponent 过
- op : string;
- value : any;
- logic : string; // 'and' | 'or'
-};
-
-export class AkSupaQueryBuilder {
- private _supa : AkSupa;
- private _table : string;
- private _filter : UTSJSONObject | null = null;
- private _options : AkSupaSelectOptions = {};
- private _values : UTSJSONObject | Array | null = null;
- private _single : boolean = false;
- private _conditions : Array = [];
- private _nextLogic : string = 'and';
- // 新增:记录当前操作类型
- private _action : 'select' | 'insert' | 'update' | 'delete' | 'rpc' | null = null;
- private _orString : string | null = null; // 新增:支持 or 字符串
- private _rpcFunction : string | null = null;
- private _rpcParams : UTSJSONObject | null = null;
- private _page : number = 1; // 新增:当前页码
-
- constructor(supa : AkSupa, table : string) {
- this._supa = supa;
- this._table = table;
- }
-
- // 链式条件方法
- eq(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'eq', value); }
- neq(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'neq', value); }
- gt(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'gt', value); }
- gte(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'gte', value); }
- lt(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'lt', value); }
- lte(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'lte', value); }
- like(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'like', value); }
- ilike(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'ilike', value); }
- in(field : string, value : any[]) : AkSupaQueryBuilder { return this._addCond(field, 'in', value); }
- is(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'is', value); }
- contains(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'cs', value); }
- containedBy(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'cd', value); }
- not(field : string, opOrValue : any, value?: any) : AkSupaQueryBuilder {
- if (value !== undefined) {
- // 三元形式:field, operator, value
- // 例如 not('badge', 'is', null) -> badge=not.is.null
- const combinedOp = 'not.' + opOrValue;
- // 将 null 转换为字符串 'null',避免构造对象时缺少 value 属性
- let safeValue = value;
- if (value === null) {
- safeValue = 'null';
- }
- return this._addCond(field, combinedOp, safeValue);
- } else {
- // 二元形式:field, value
- let safeValue = opOrValue;
- if (opOrValue === null) {
- safeValue = 'null';
- }
- return this._addCond(field, 'not', safeValue);
- }
- }
-
- and() : AkSupaQueryBuilder { this._nextLogic = 'and'; return this; }
- or(str ?: string) : AkSupaQueryBuilder {
- if (typeof str == 'string') {
- this._orString = str;
- } else {
- this._nextLogic = 'or';
- }
- return this;
- }
-
- private _addCond(afield : string, op : string, value : any) : AkSupaQueryBuilder {
- //console.log('add cond:', op, afield, value)
- const field = encodeURIComponent(afield)!!
- // 将 null 转换为字符串 'null',避免构造对象时缺少 value 属性
- let safeValue = value;
- if (value === null) {
- safeValue = 'null';
- }
- this._conditions.push({ field, op, value: safeValue, logic: this._nextLogic });
- //console.log(this._conditions)
- this._nextLogic = 'and';
- return this;
- }
-
- // 支持原有 where 方式
- where(filter : UTSJSONObject) : AkSupaQueryBuilder {
- this._filter = filter;
- return this;
- }
-
- page(page : number) : AkSupaQueryBuilder {
- this._page = page;
- // 如果已设置 limit,则自动设置 range
- let limit = 0;
- if (typeof this._options.limit == 'number') {
- limit = this._options.limit ?? 0;
- }
- if (limit > 0) {
- const from = (page - 1) * limit;
- const to = from + limit - 1;
- this.range(from, to);
- }
- return this;
- }
- limit(limit : number) : AkSupaQueryBuilder {
- this._options.limit = limit;
- // 总是为 limit 设置对应的 range,确保限制生效
- const from = (this._page - 1) * limit;
- const to = from + limit - 1;
- this.range(from, to);
- return this;
- }
-
- order(order : string, options ?: OrderOptions) : AkSupaQueryBuilder {
- if (options != null && options.ascending == false) {
- this._options.order = order + '.desc';
- } else {
- this._options.order = order + '.asc';
- }
- return this;
- }
- columns(columns : string) : AkSupaQueryBuilder {
- this._options.columns = columns;
- return this;
- }
-
- // 新增:专门的 count 方法
- count(option : CountOption = 'exact') : AkSupaQueryBuilder {
- this._options.count = option;
- this._options.head = true; // count 操作默认使用 head 模式
- return this;
- }
-
- // 新增:便捷的 count 方法
- countExact() : AkSupaQueryBuilder {
- return this.count('exact');
- }
-
- countEstimated() : AkSupaQueryBuilder {
- return this.count('estimated');
- }
-
- countPlanned() : AkSupaQueryBuilder {
- return this.count('planned');
- }
-
- // 新增:head 模式方法
- head(enable : boolean = true) : AkSupaQueryBuilder {
- this._options.head = enable;
- return this;
- }
-
- values(values : UTSJSONObject) : AkSupaQueryBuilder {
- this._values = values;
- return this;
- }
- single() : AkSupaQueryBuilder {
- this._single = true;
- return this;
- }
- range(from : number, to : number) : AkSupaQueryBuilder {
- this._options.rangeFrom = from;
- this._options.rangeTo = to;
- //console.log('设置 range:', from, 'to', to);
- return this;
- }
- // 将 _conditions 强类型直接转换为 Supabase/PostgREST 查询字符串(不再用 UTSJSONObject 做中转)
- private _buildFilter() : string | null {
- if (this._conditions.length == 0 && (this._orString==null || this._orString == "")) {
- // 兼容 where(filter) 方式
- if (this._filter == null) return null;
- // 兼容旧的 UTSJSONObject filter
- return buildSupabaseFilterQuery(this._filter);
- }
-
- // 先分组 and/or,全部用 AkSupaCondition 强类型
- const ands: AkSupaCondition[] = [];
- const ors: AkSupaCondition[] = [];
- for (const c of this._conditions) {
- if (c.logic == "or") {
- ors.push(c);
- } else {
- ands.push(c);
- }
- }
-
- const params: string[] = [];
- // 处理 and 条件
- for (const cond of ands) {
- const k = cond.field;
- const op = cond.op;
- const val = cond.value;
- if ((op == 'in' || op == 'not.in') && Array.isArray(val)) {
- params.push(`${k}=${op}.(${val.map(x => typeof x == 'object' ? encodeURIComponent(JSON.stringify(x)) : encodeURIComponent(x.toString())).join(',')})`);
- } else if ((op == 'is' || op == 'not.is') && (val == null || val == 'null')) {
- params.push(`${k}=${op}.null`);
- } else {
- const opvalstr: string = (typeof val == 'object') ? JSON.stringify(val) : (val as string);
- params.push(`${k}=${op}.${encodeURIComponent(opvalstr)}`);
- }
- }
- // 处理 or 条件
- if (ors.length > 0) {
- const orStr = ors.map(o => {
- const k = o.field;
- const op = o.op;
- const val = o.value;
- if (op == "in" && Array.isArray(val)) {
- return `${k}.in.(${val.map(x => encodeURIComponent(x as string)).join(",")})`;
- }
- if (op == "is" && (val == null)) {
- return `${k}.is.null`;
- }
- return `${k}.${op}.${encodeURIComponent(val as string)}`;
- }).join(",");
- params.push(`or=(${orStr})`);
- }
- if (this._orString!=null && this._orString !== "") {
- params.push(`or=(${encodeURIComponent(this._orString!!)})`);
- }
- return params.length > 0 ? params.join('&') : null;
- }
-
- select(columns ?: string, opt ?: UTSJSONObject) : AkSupaQueryBuilder {
- this._action = 'select';
- if (columns != null) {
- this._options.columns = columns;
- }
- if (opt != null) {
- // 合并 opt 到 this._options
- Object.assign(this._options, opt);
- }
- return this;
- }
- insert(values : UTSJSONObject | Array) : AkSupaQueryBuilder {
- this._action = 'insert';
- // 检查是否为空
- if (Array.isArray(values)) {
- if (values.length == 0) throw toUniError('No values set for insert', 'Insert操作缺少数据');
- } else {
- if (UTSJSONObject.keys(values).length == 0) throw toUniError('No values set for insert', 'Insert操作缺少数据');
- }
- this._values = values;
- return this;
- }
- update(values : UTSJSONObject) : AkSupaQueryBuilder {
- this._action = 'update';
- //console.log('ak update', this._action)
- if (UTSJSONObject.keys(values).length == 0) throw toUniError('No values set for update', '更新操作缺少数据');
- this._values = values;
- //console.log('ak update', values)
- return this;
- }
- delete() : AkSupaQueryBuilder {
- this._action = 'delete';
- //console.log('delete action now')
- const filter = this._buildFilter();
- //console.log(filter)
- if (filter == null) throw toUniError('No filter set for delete', '删除操作缺少筛选条件');
- //console.log('delete action')
- return this;
- }
-
- rpc(functionName : string, params ?: UTSJSONObject) : AkSupaQueryBuilder {
- this._action = 'rpc';
- this._rpcFunction = functionName;
- this._rpcParams = params;
- return this;
- }
- // 链式请求最终执行方法 - 返回 UTSJSONObject
- async execute() : Promise> {
- //console.log('execute')
- const filter = this._buildFilter();
- //console.log('execute', filter)
- let res : any;
- switch (this._action) {
- case 'select': {
- // 传递 single 状态到 options
- if (this._single) {
- this._options.single = true;
- // 如果是 single 请求,自动设置 limit 为 1
- if (this._options.limit == null) {
- this._options.limit = 1;
- }
- //console.log(this._options)
- } // 保证分页统计
- if (this._options.limit != null) {
- if (this._options.getcount == null && this._options.count == null) {
- this._options.count = 'exact'; // 优先使用新的 count 选项
- }
- }
- res = await this._supa.select(this._table, filter, this._options);
- // 解析 content-range header
- let total = 0;
- let hasmore = false;
- const page = this._page;
- let resdata = res.data
- let limit = 0;
- if (typeof this._options.limit == 'number') {
- limit = this._options.limit ?? 0;
- } else if (Array.isArray(resdata)) {
- limit = resdata.length;
- }
- let contentRange : string | null = null;
- if (res.headers != null) {
- let theheader = res.headers as UTSJSONObject
- if (typeof theheader.get == 'function') {
-
- contentRange = theheader.get('content-range') as string | null;
- } else if (typeof theheader['content-range'] == 'string') {
- contentRange = theheader['content-range'] as string;
- }
- }
- if (contentRange != null) {
- const match = /\/(\d+)$/.exec(contentRange);
- if (match != null) {
- total = parseInt(match[1] ?? "0");
- hasmore = (page * limit) < total;
- }
- }
- if (total == 0) {
- if (typeof res['count'] == 'number') {
- total = res['count'] as number ?? 0;
- } else if (Array.isArray(resdata)) {
- total = resdata.length;
- } else {
- total = 0;
- }
- }
- if (!hasmore) hasmore = (page * limit) < total; // 如果是 head 模式,只返回 count 信息
- if (this._options.head == true) {
- return {
- data: null, // head 模式不返回数据
- total,
- page,
- limit,
- hasmore: false, // head 模式不需要分页信息
- origin: res,
- status: res.status,
- headers: res.headers,
- error: res.error
- } as AkReqResponse;
- }
-
- return {
- data: res.data,
- total,
- page,
- limit,
- hasmore,
- origin: res,
- status: res.status,
- headers: res.headers,
- error: res.error
- } as AkReqResponse;
- }
- case 'insert': {
- const insertValues = this._values;
- if (insertValues == null) throw toUniError('No values set for insert', '插入操作缺少数据');
- res = await this._supa.insert(this._table, insertValues);
- break;
- } case 'update': {
- const updateValues = this._values;
- if (updateValues == null) throw toUniError('No values set for update', '更新操作缺少数据');
- if (filter == null) throw toUniError('No filter set for update', '更新操作缺少筛选条件');
- // Update操作只支持单个对象,不支持数组
- if (Array.isArray(updateValues)) throw toUniError('Update does not support array values', '更新操作不支持数组数据');
- res = await this._supa.update(this._table, filter, updateValues as UTSJSONObject);
- break;
- }
- case 'delete': {
- if (filter == null) throw toUniError('No filter set for delete', '删除操作缺少筛选条件');
- res = await this._supa.delete(this._table, filter);
- break;
- }
- case 'rpc': {
- if (this._rpcFunction == null) throw toUniError('No RPC function specified', 'RPC调用缺少函数名');
- res = await this._supa.rpc(this._rpcFunction as string, this._rpcParams);
- break;
- }
- default: {
- res = await this._supa.select(this._table, filter, this._options);
- }
- }
- // 保证 data 字段存在(不能赋null,赋空对象或空字符串)
- if (res["data"] == null) res["data"] = {};
- return res;
- } // 新增:支持类型转换的执行方法
- async executeAs() : Promise>> {
- const result = await this.execute();
-
- // 如果原始 data 是 null,直接返回 null
- if (result.data == null) {
- const aaa = {
- status: result.status,
- data: null,
- headers: result.headers,
- error: result.error,
- total: result.total,
- page: result.page,
- limit: result.limit,
- hasmore: result.hasmore,
- origin: result.origin
- }
- return aaa;
- }
-
- // 尝试类型转换
- let convertedData : T | Array | null = null;
-
- try {
- if (Array.isArray(result.data)) {
- // 处理数组数据
- const dataArray = result.data;
- const convertedArray : Array = [];
- //console.log(convertedArray)
- for (let i = 0; i < dataArray.length; i++) {
- const item = dataArray[i];
- if (item instanceof UTSJSONObject) {
- // #ifdef APP-ANDROID
- // //console.log(item)
- const parsed = item.parse();
- // //console.log('ak parsed')
- // #endif
- // #ifndef APP-ANDROID
- const parsed = item as T;
- // #endif
- if (parsed != null) {
- convertedArray.push(parsed);
- } else {
- console.warn('转换失败,使用原始对象:', item);
- convertedArray.push(item as T);
- }
- } else {
- // 将普通对象转换为 UTSJSONObject 后再 parse
- const jsonObj = new UTSJSONObject(item);
- // #ifdef APP-ANDROID
- const parsed = jsonObj.parse();
- // #endif
- // #ifndef APP-ANDROID
- const parsed = jsonObj as T;
- // #endif
- if (parsed != null) {
- convertedArray.push(parsed);
- }
- else {
- console.warn('转换失败,使用原始对象:', item);
- convertedArray.push(item as T);
- }
- }
- }
- convertedData = convertedArray;
-
- } else {
- // 处理单个对象
- const convertedArray : Array = [];
- if (result.data instanceof UTSJSONObject) {
- const parsed = result.data.parse();
-
- if (parsed != null) {
- convertedArray.push(parsed);
- }
- else {
- //console.log('转换失败:', result.data)
- }
- } else {
- const jsonObj = new UTSJSONObject(result.data);
- const parsed = jsonObj.parse();
- if (parsed != null) {
- convertedArray.push(parsed);
- }
- else {
- //console.log('转换失败:', result.data)
- }
- }
- convertedData = convertedArray;
- }
- } catch (e) {
- console.warn('数据类型转换失败,使用原始数据:', e);
- console.log(result.data)
- // 转换失败时,使用原始数据
- convertedData = result.data as T | Array;
- }
- result.data = convertedData
- const aaa = result as AkReqResponse
- // const aaa = {
- // status: result.status,
- // data: convertedData,
- // headers: result.headers,
- // error: result.error,
- // total: result.total,
- // page: result.page,
- // limit: result.limit,
- // hasmore: result.hasmore,
- // origin: result.origin
- // }
- return aaa;
-
- }
-}
-
-// 新增:链式 Storage 上传
-export class AkSupaStorageUploadBuilder {
- private _supa : AkSupa;
- private _bucket : string = '';
- private _path : string = '';
- private _file : string = '';
- private _options : UTSJSONObject = {};
-
- constructor(supa : AkSupa, bucket : string) {
- this._supa = supa;
- this._bucket = bucket;
- }
-
- path(path : string) : AkSupaStorageUploadBuilder {
- this._path = path;
- return this;
- }
-
- file(file : string) : AkSupaStorageUploadBuilder {
- this._file = file;
- return this;
- }
-
- options(options : UTSJSONObject) : AkSupaStorageUploadBuilder {
- this._options = options;
- return this;
- }
- async upload() : Promise> {
- if (this._bucket == '' || this._path == '' || this._file == '') {
- throw toUniError('bucket, path, file are required', '上传文件缺少必要参数');
- }
- const url = `${this._supa.baseUrl}/storage/v1/object/${this._bucket}/${this._path}`;
- const apikey = this._supa.apikey;
- // 适配 uni.uploadFile
- const uploadOptions : AkReqUploadOptions = {
- url,
- filePath: this._file, // 这里假设 file 是本地路径
- name: 'file', // 默认字段名
- headers: {},
- apikey,
- formData: this._options
- };
- return await AkReq.upload(uploadOptions);
- }
-}
-
-// 新增:明确的 StorageBucket 类,支持链式 upload
-class AkSupaStorageBucket {
- private supa : AkSupa;
- private bucket : string;
- constructor(supa : AkSupa, bucket : string) {
- this.supa = supa;
- this.bucket = bucket;
- }
- async upload(path : string, filePath : string, options ?: UTSJSONObject) : Promise> {
- const url = `${this.supa.baseUrl}/storage/v1/object/${this.bucket}/${path}`;
- let headers : UTSJSONObject = { apikey: this.supa.apikey };
- const formData : UTSJSONObject = {};
- if (options != null && typeof options == 'object') {
- if (typeof options.get == 'function' && options.get('x-upsert') != null) {
- headers['x-upsert'] = options.get('x-upsert');
- }
- const keys = UTSJSONObject.keys(options);
- for (let i = 0; i < keys.length; i++) {
- const k = keys[i];
- if (k != 'x-upsert') formData[k] = options.get(k);
- }
- }
- const token = AkReq.getToken();
- if (token != null && !(token == '')) {
- headers['Authorization'] = `Bearer ${token}`;
- }
- return await AkReq.upload({
- url,
- filePath,
- name: 'file',
- apikey: this.supa.apikey,
- formData,
- headers
- });
- }
-}
-
-export class AkSupaStorageApi {
- private _supa : AkSupa;
- constructor(supa : AkSupa) {
- this._supa = supa;
- }
- from(bucket : string) : AkSupaStorageBucket {
- return new AkSupaStorageBucket(this._supa, bucket);
- }
-}
-
-export class AkSupa {
- baseUrl : string;
- apikey : string;
- session : AkSupaSignInResult | null = null;
- user : UTSJSONObject | null = null;
- storage : AkSupaStorageApi;
-
- constructor(baseUrl : string, apikey : string) {
- this.baseUrl = baseUrl;
- this.apikey = apikey;
- this.storage = new AkSupaStorageApi(this);
- // [CHANGE][2026-01-30] hydrate user/session from persisted token (see docs: components/supadb/docs/CHANGELOG.md)
- try {
- this.hydrateSessionFromStorage();
- } catch (e) {
- // ignore
- }
- }
-
- // [CHANGE][2026-01-30] hydrate user from /auth/v1/user when token exists in storage
- async hydrateSessionFromStorage() : Promise {
- try {
- const token = AkReq.getToken();
- if (token == null || token == '') return false;
- const res = await AkReq.request({
- url: this.baseUrl + '/auth/v1/user',
- method: 'GET',
- headers: {
- apikey: this.apikey,
- Authorization: `Bearer ${token}`,
- 'Content-Type': 'application/json'
- } as UTSJSONObject
- }, false);
- const status = res.status ?? 0;
- if (!(status >= 200 && status < 400)) {
- return false;
- }
- let user: UTSJSONObject | null = null;
- try {
- user = new UTSJSONObject(res.data);
- } catch (e) {
- user = null;
- }
- if (user == null) return false;
- this.user = user;
- // 仅补齐最小 session 结构,供 getSession / UI 判断登录态使用
- if (this.session == null) {
- this.session = {
- access_token: token,
- refresh_token: AkReq.getRefreshToken() ?? '',
- expires_at: AkReq.getExpiresAt() ?? 0,
- user: user,
- token_type: 'bearer',
- expires_in: 0,
- raw: user
- } as any;
- }
- return true;
- } catch (e) {
- return false;
- }
- }
-
- async resetPassword(email : string) : Promise {
- const res = await AkReq.request({
- url: this.baseUrl + '/auth/v1/recover',
- method: 'POST',
- headers: {
- apikey: this.apikey,
- 'Content-Type': 'application/json'
- } as UTSJSONObject,
- data: { email } as UTSJSONObject,
- contentType: 'application/json'
- }, false);
-
- // Supabase returns 200 when the reset email is sent successfully
- return res.status == 200;
- }
- async signOut() {
- this.session = null
- this.user = null
- }
- async signIn(email : string, password : string) : Promise {
- // 提前检查 apikey 配置是否为占位符,避免发送无效请求导致 401
- if (this.apikey == null || this.apikey.trim() === '' || this.apikey === 'your-anon-key') {
- throw new Error('Supabase 配置错误:请在 ak/config.uts 中设置 SUPA_KEY(当前为占位符)');
- }
- const res = await AkReq.request({
- url: this.baseUrl + '/auth/v1/token?grant_type=password',
- method: 'POST',
- headers: {
- apikey: this.apikey,
- 'Content-Type': 'application/json'
- } as UTSJSONObject,
- data: { email, password } as UTSJSONObject,
- contentType: 'application/json'
- }, false);
- // 如果响应不是 2xx(例如 401),提取后端错误信息并抛出,便于上层显示具体原因
- const status = res.status ?? 0;
- if (!(status >= 200 && status < 400)) {
- let msg = 'user.login.login_failed';
- try {
- if (res.data != null) {
- const obj = new UTSJSONObject(res.data);
- msg = obj.getString('message') ?? obj.getString('error') ?? obj.getString('msg') ?? obj.getString('description') ?? obj.getString('error_description') ?? msg;
- }
- } catch (e) {
- // ignore
- }
- throw new Error(msg);
- }
- // 解析成功的返回体
- let data: UTSJSONObject;
- try {
- data = new UTSJSONObject(res.data);
- } catch (e) {
- data = new UTSJSONObject({});
- }
- const access_token = data.getString('access_token') ?? '';
- const refresh_token = data.getString('refresh_token') ?? '';
- const expires_at = data.getNumber('expires_at') ?? 0;
- const user = data.getJSON('user');
- AkReq.setToken(access_token, refresh_token, expires_at);
- const session : AkSupaSignInResult = {
- access_token: access_token,
- refresh_token: refresh_token,
- expires_at: expires_at,
- user: user,
- token_type: data.getString('token_type') ?? '',
- expires_in: data.getNumber('expires_in') ?? 0,
- raw: data
- };
- this.session = session;
- this.user = user;
- return session;
- }
-
- /**
- * 获取当前 session 和 user
- */
- getSession() : AkSupaSessionInfo {
- return {
- session: this.session,
- user: this.user
- };
- }
-
- async signUp(email : string, password : string) : Promise {
- const res = await AkReq.request({
- url: this.baseUrl + '/auth/v1/signup',
- method: 'POST',
- headers: {
- apikey: this.apikey,
- 'Content-Type': 'application/json'
- } as UTSJSONObject,
- data: { email, password } as UTSJSONObject,
- contentType: 'application/json'
- }, false);
- return res.data as UTSJSONObject;
- }
-
-
- /**
- * 查询表数据(GET方式,支持多条件、limit等,filter自动转为supabase风格query)
- * filter 支持:
- * { usr_id: { lt: 800 }, name: { ilike: '%foo%' }, status: 'active', age: { gte: 18, lte: 30 } }
- * 操作符支持 eq, neq, lt, lte, gt, gte, like, ilike, in, is, not, contains, containedBy, range, fts, plfts, phfts, wfts
- */
-async select(table : string, filter ?: string | null, options ?: AkSupaSelectOptions) : Promise> {
- let url = this.baseUrl + '/rest/v1/' + table;
- let headers = {
- apikey: this.apikey,
- 'Content-Type': 'application/json',
- Authorization: `Bearer ${AkReq.getToken() ?? ''}`
- } as UTSJSONObject;
- let params : string[] = [];
- if (options != null) {
- if (options.columns != null && !(options.columns == "")) params.push('select=' + encodeURIComponent(options.columns ?? ""));
- if (options.limit != null) {
- params.push('limit=' + options.limit);
- //console.log('设置 limit 参数:', options.limit);
- }
- if (options.order != null && !(options.order == "")) params.push('order=' + encodeURIComponent(options.order ?? ""));
- if (options.rangeFrom != null && options.rangeTo != null) {
- headers['Range'] = `${options.rangeFrom}-${options.rangeTo}`;
- headers['Range-Unit'] = 'items';
- //console.log('设置 Range 头部:', `${options.rangeFrom}-${options.rangeTo}`);
- }
-
- // 向后兼容:支持旧的 getcount 参数
- let countOption = options.count ?? options.getcount;
- if (countOption != null) {
- headers['Prefer'] = `count=${countOption}`;
- }
- // 新增:head 模式支持
- if (options.head == true) {
- //console.log('使用 head 模式,只返回元数据');
- // HEAD 请求用于只获取 count,不返回数据
- if (headers['Prefer'] != null) {
- headers['Prefer'] = (headers['Prefer'] as string) + ',return=minimal';
- } else {
- headers['Prefer'] = 'return=minimal';
- }
- }
-
- if (options.single == true) {
- //console.log('使用 single() 模式');
- if (headers['Prefer'] != null) {
- headers['Prefer'] = (headers['Prefer'] as string) + ',return=representation,single-object';
- } else {
- headers['Prefer'] = 'return=representation,single-object';
- }
- }
-
- // 确保有 select 参数
- if (options.columns == null) {
- params.push('select=*');
- } else if (options.columns == "") {
- params.push('select=*');
- }
- } else {
- params.push('select=*');
- }
- // 直接用 string filter
- if (filter!=null && filter !== "") {
- params.push(filter!!);
- }
- if (params.length > 0) {
- url += '?' + params.join('&');
- }
-
- //console.log(url)
-
- // 确定HTTP方法:如果是head模式,使用HEAD方法
- let httpMethod: 'GET' | 'HEAD' = 'GET';
- if (options != null && options.head == true) {
- httpMethod = 'HEAD';
- //console.log('使用 HEAD 方法进行 count 查询');
- }
-
- let reqOptions : AkReqOptions = {
- url,
- method: httpMethod,
- headers
- };
- return await this.requestWithAutoRefresh(reqOptions);
-}
-
-async select_uts(table : string, filter ?: UTSJSONObject | null, options ?: AkSupaSelectOptions) : Promise> {
- const filter_str = buildSupabaseFilterQuery(filter)
- return this.select(table,filter_str,options)
-}
- /**
- * 插入表数据
- * @param table 表名
- * @param row 插入对象
- * @returns 插入结果
- */
- async insert(table : string, row : UTSJSONObject | Array) : Promise> {
- const url = this.baseUrl + '/rest/v1/' + table;
- const headers = {
- apikey: this.apikey,
- 'Content-Type': 'application/json',
- Authorization: `Bearer ${AkReq.getToken() ?? ''}`,
- Prefer: 'return=representation'
- } as UTSJSONObject;
-
- // 如果是数组,直接传递;如果是单个对象,也直接传递
- // Supabase REST API 原生支持两种格式
- let reqOptions : AkReqOptions = {
- url,
- method: 'POST',
- headers,
- data: row, // 可以是单个对象或数组
- contentType: 'application/json'
- };
- return await this.requestWithAutoRefresh(reqOptions);
- }
-
- /**
- * 更新表数据
- * @param table 表名
- * @param filter 过滤条件对象
- * @param values 更新内容对象
- * @returns 更新结果
- */
-async update(table : string, filter : string | null, values : UTSJSONObject) : Promise> {
- let url = this.baseUrl + '/rest/v1/' + table;
- if (filter!=null && filter !== "") {
- url += '?' + filter;
- }
- const headers = {
- apikey: this.apikey,
- 'Content-Type': 'application/json',
- Authorization: `Bearer ${AkReq.getToken() ?? ''}`,
- Prefer: 'return=representation'
- } as UTSJSONObject;
- let reqOptions : AkReqOptions = {
- url,
- method: 'PATCH',
- headers,
- data: values,
- contentType: 'application/json'
- };
- return await this.requestWithAutoRefresh(reqOptions);
-}
-
- /**
- * 删除表数据
- * @param table 表名
- * @param filter 过滤条件对象
- * @returns 删除结果
- */
-async delete(table : string, filter : string | null) : Promise> {
- let url = this.baseUrl + '/rest/v1/' + table;
- if (filter!=null && filter !== "") {
- url += '?' + filter;
- }
- const headers = {
- apikey: this.apikey,
- 'Content-Type': 'application/json',
- Authorization: `Bearer ${AkReq.getToken() ?? ''}`,
- Prefer: 'return=representation'
- } as UTSJSONObject;
- let reqOptions : AkReqOptions = {
- url,
- method: 'DELETE',
- headers,
- contentType: 'application/json'
- };
- return await this.requestWithAutoRefresh(reqOptions);
-}
-
- /**
- * 调用 Supabase/PostgREST RPC (function)
- * @param functionName 函数名
- * @param params 参数对象
- * @returns AkReqResponse
- */
- async rpc(functionName : string, params ?: UTSJSONObject) : Promise> {
- const url = `${this.baseUrl}/rest/v1/rpc/${functionName}`;
- const headers = {
- apikey: this.apikey,
- 'Content-Type': 'application/json',
- Authorization: `Bearer ${AkReq.getToken() ?? ''}`
- } as UTSJSONObject;
- let reqOptions : AkReqOptions = {
- url,
- method: 'POST',
- headers,
- data: params ?? {},
- contentType: 'application/json'
- };
- return await this.requestWithAutoRefresh(reqOptions);
- }
- /**
- * 兼容 supabase-js 风格
- * @param tableName 表名
- */
- from(tableName : string) : AkSupaQueryBuilder {
- return new AkSupaQueryBuilder(this, tableName);
- }
- // AkSupa类内新增:自动刷新session
- async refreshSession() : Promise {
- if (this.session == null || this.session?.refresh_token == null) return false;
- try {
- const res = await AkReq.request({
- url: this.baseUrl + '/auth/v1/token?grant_type=refresh_token',
- method: 'POST',
- headers: {
- apikey: this.apikey,
- 'Content-Type': 'application/json'
- } as UTSJSONObject,
- data: { refresh_token: this.session?.refresh_token } as UTSJSONObject,
- contentType: 'application/json'
- }, false);
- if (res.status == 200 && (res.data != null)) {
- const data = res.data as UTSJSONObject;
- const access_token = data.getString('access_token') ?? '';
- const refresh_token = data.getString('refresh_token') ?? '';
- const expires_at = data.getNumber('expires_at') ?? 0;
- const user = data.getJSON('user');
- this.session = {
- access_token,
- refresh_token,
- expires_at,
- user,
- token_type: data.getString('token_type') ?? '',
- expires_in: data.getNumber('expires_in') ?? 0,
- raw: data
- };
- this.user = user;
- // 更新本地token
- AkReq.setToken(access_token, refresh_token, expires_at);
- return true;
- }
- return false;
- } catch (e) {
- return false;
- }
- }
-
- // AkSupa类内新增:自动刷新封装
- async requestWithAutoRefresh(reqOptions : AkReqOptions, isRetry = false) : Promise> {
- let res = await AkReq.request(reqOptions, false);
- // JWT过期:Supabase风格
- const isJwtExpired = (res.status == 401); //res != null && res.data != null && typeof res.data == 'object' && (res.data as UTSJSONObject)?.getString('code') == 'PGRST301';
- // 401未授权
- const isUnauthorized = (res.status == 401);
- if ((isJwtExpired || isUnauthorized) && !isRetry) {
- const ok = await this.refreshSession();
- if (ok) {
- let headers = reqOptions.headers
- if (headers == null) {
- headers = new UTSJSONObject()
- }
- if (typeof headers.set == 'function') {
- headers.set('Authorization', `Bearer ${AkReq.getToken() ?? ''}`)
- reqOptions.headers = headers
- }
-
- res = await AkReq.request(reqOptions, false);
- } else {
- uni.removeStorageSync('user_id');
- uni.removeStorageSync('token');
-
- //uni.reLaunch({ url: '/pages/user/login' });
- console.log('登录已过期,请重新登录');
- throw toUniError('登录已过期,请重新登录', '用户认证失败');
- }
- }
- return res;
- }
-}
-
-// 工具函数:将 UTSJSONObject filter 转为 Supabase/PostgREST 查询字符串
-function buildSupabaseFilterQuery(filter : UTSJSONObject | null) : string {
- //console.log(filter)
- if (filter == null) return "";
- // 类型保护:如果不是 UTSJSONObject,自动包裹
- if (typeof filter.get !== 'function') {
- try {
- filter = new UTSJSONObject(filter as any)
- } catch (e) {
- console.warn('filter 不是 UTSJSONObject,且无法转换', filter)
- return ''
- }
- }
- const params : string[] = [];
- const keys : string[] = UTSJSONObject.keys(filter);
- for (let i = 0; i < keys.length; i++) {
- const k = keys[i];
- const v = filter.get(k);
- if (k == 'or' && typeof v == 'string') {
- params.push(`or=(${v})`);
- continue;
- }
- if (v != null && typeof v == 'object' && typeof (v as UTSJSONObject).get == 'function') {
- const vObj = v as UTSJSONObject;
- const opKeys = UTSJSONObject.keys(vObj);
- for (let j = 0; j < opKeys.length; j++) {
- const op = opKeys[j];
- const opVal = vObj.get(op);
- if ((op == 'in' || op == 'not.in') && Array.isArray(opVal)) {
- params.push(`${k}=${op}.(${opVal.map(x => typeof x == 'object' ? encodeURIComponent(JSON.stringify(x)) : encodeURIComponent(x.toString())).join(',')})`);
- } else if (op == 'is' && (opVal == null || opVal == 'null')) {
- params.push(`${k}=is.null`);
- } else {
- const opvalstr : string = (typeof opVal == 'object') ? JSON.stringify(opVal) : (opVal as string);
- params.push(`${k}=${op}.${encodeURIComponent(opvalstr)}`);
- }
- }
- } else if (v != null && typeof v == 'object') {
- const vObj = v as UTSJSONObject;
- const opKeys = UTSJSONObject.keys(vObj);
- for (let j = 0; j < opKeys.length; j++) {
- const op = opKeys[j];
- const opVal = vObj.get(op);
- params.push(`${k}=${op}.${encodeURIComponent(!(opVal == null) ? (typeof opVal == 'object' ? JSON.stringify(opVal) : opVal.toString()) : '')}`);
- }
- } else {
- params.push(`${k}=eq.${encodeURIComponent(!(v == null) ? v.toString() : '')}`);
- }
- }
- return params.join('&');
-}
-
-/**
- * 创建 Supabase 客户端实例
- * @param url 项目 URL
- * @param key 项目匿名密钥 (Anon Key)
- */
-export function createClient(url : string, key : string) : AkSupa {
- return new AkSupa(url, key);
-}
-
-export default AkSupa;
diff --git a/mall/components/supadb/aksupainstance - 副本.uts b/mall/components/supadb/aksupainstance - 副本.uts
deleted file mode 100644
index a47b3f3e..00000000
--- a/mall/components/supadb/aksupainstance - 副本.uts
+++ /dev/null
@@ -1,18 +0,0 @@
-//import AkSupa from './aksupa.uts'
-//import { SUPA_URL, SUPA_KEY } from '@/ak/config.uts'
-
-//const supa = new AkSupa(SUPA_URL, SUPA_KEY)
-
-//const supaReady: Promise = (async () => {
-/// try {
- // await supa.signIn('akoo@163.com', 'Hf2152111')
-// await supa.signIn('am@163.com', 'kookoo')
-// return true
-// } catch (err) {
-// console.error('Supabase auto sign-in failed', err)
-// return false
-// }
-//})()
-
-//export { supaReady }
-//export default supa
\ No newline at end of file
diff --git a/mall/components/supadb/aksupainstance.uts b/mall/components/supadb/aksupainstance.uts
deleted file mode 100644
index 8ce98ec3..00000000
--- a/mall/components/supadb/aksupainstance.uts
+++ /dev/null
@@ -1,34 +0,0 @@
-// /components/supadb/aksupainstance.uts
-import { createClient } from './aksupa.uts'
-import { SUPA_URL, SUPA_KEY } from '@/ak/config.uts'
-
-// 创建单一真实的 Supabase 客户端实例 (使用 config.uts 配置)
-// Create single source of truth client using config
-const supaInstance = createClient(SUPA_URL, SUPA_KEY)
-
-// 导出默认实例 (供 login.uvue 等使用)
-export default supaInstance
-
-// 导出命名实例 'supabase' (供 store.uts 使用)
-export const supabase = supaInstance
-
-// 导出 isSupabaseReady 状态
-export const isSupabaseReady = true
-
-// 兼容 ensureSupabaseReady
-export async function ensureSupabaseReady() {
- return true
-}
-
-// 检查连接状态的函数
-export function checkConnection() {
- return Promise.resolve(true)
-}
-
-// 兼容 supaReady Promise
-export const supaReady = Promise.resolve(true)
-
-// 如果有其他需要导出的函数,可以这样导出:
-export function initializeSupabase(url: string, key: string) {
- return createClient(url, key)
-}
diff --git a/mall/components/supadb/aksuparealtime.uts b/mall/components/supadb/aksuparealtime.uts
deleted file mode 100644
index 3add9f7e..00000000
--- a/mall/components/supadb/aksuparealtime.uts
+++ /dev/null
@@ -1,277 +0,0 @@
-// Postgres 变更订阅参数类型(强类型导出,便于 UTS Android 复用)
-export type PostgresChangesSubscribeParams = {
- event : string;
- schema : string;
- table : string;
- filter ?: string;
- topic ?: string;
- onChange : (payload : any) => void;
-};
-
-type PostgresChangeListener = {
- topic : string;
- event : string;
- schema : string;
- table : string;
- filter : string | null;
- onChange : (payload : any) => void;
-};
-
-export type AkSupaRealtimeOptions = {
- url : string; // ws/wss 地址
- channel : string; // 订阅频道
- token ?: string; // 可选,鉴权token
- apikey ?: string; // 可选,supabase apikey
- onMessage : (data : UTSJSONObject) => void;
- onOpen ?: (res : any) => void;
- onClose ?: (res : any) => void;
- onError ?: (err : any) => void;
-};
-
-export class AkSupaRealtime {
- ws : SocketTask | null = null;
- options : AkSupaRealtimeOptions | null = null;
- isOpen : boolean = false;
- heartbeatTimer : any = 0;
- joinedTopics : Set = new Set();
- listeners : Array = [];
-
- constructor(options : AkSupaRealtimeOptions) {
- this.options = options;
- }
-
- connect() {
- const opts = this.options;
- if (opts == null) return;
- // 拼接 apikey 和 vsn=1.0.0 到 ws url
- let wsUrl = opts.url;
- // apikey 兼容 query 已有参数和无参数两种情况
- if (opts.apikey != null && opts.apikey !== "") {
- const hasQuery = wsUrl.indexOf('?') != -1;
- // 移除已有 apikey 参数,避免重复
- wsUrl = wsUrl.replace(/([&?])apikey=[^&]*/g, '$1').replace(/[?&]$/, '');
- wsUrl += (hasQuery ? '&' : '?') + 'apikey=' + encodeURIComponent('' + opts.apikey);
- }
- if (wsUrl.indexOf('vsn=') == -1) {
- wsUrl += (wsUrl.indexOf('?') == -1 ? '?' : '&') + 'vsn=1.0.0';
- }
- this.ws = uni.connectSocket({
- url: wsUrl,
- success: (res) => { console.log(res); },
- fail: (err) => { if (opts.onError != null) opts.onError?.(err); }
- });
- if (this.ws != null) {
- const wsTask = this.ws;
- wsTask?.onOpen((result : OnSocketOpenCallbackResult) => {
- this.isOpen = true;
- console.log('onopen', result)
- if (opts.onOpen != null) opts.onOpen?.(result);
- // 启动 heartbeat 定时器
- this.startHeartbeat();
- });
- wsTask?.onMessage((msg) => {
- console.log(msg)
- let data : UTSJSONObject | null = null;
- try {
- const msgData = (typeof msg == 'object' && msg.data !== null) ? msg.data : msg;
- data = typeof msgData == 'string' ? JSON.parse(msgData) as UTSJSONObject : msgData as UTSJSONObject;
- } catch (e) { }
- // 处理 pong
- if (
- data != null &&
- data.event == 'phx_reply' &&
- typeof data.payload == 'object' &&
- data.payload != null &&
- (data.payload as UTSJSONObject).status != null &&
- (data.payload as UTSJSONObject).status == 'ok' &&
- (data.payload as UTSJSONObject).response != null &&
- (data.payload as UTSJSONObject).response == 'heartbeat'
- ) {
- // 收到 pong,可用于续约
- // 可选:重置定时器
- }
- console.log(data)
- if (data != null) this.dispatchPostgresChange(data);
- if (opts?.onMessage != null) opts.onMessage?.(data ?? ({} as UTSJSONObject));
- });
- wsTask?.onClose((res) => {
- console.log('onclose', res)
- this.isOpen = false;
- this.joinedTopics.clear();
- this.listeners = [];
- if (opts.onClose != null) opts.onClose?.(res);
- this.stopHeartbeat();
- });
- wsTask?.onError((err) => {
- console.log(err)
- if (opts.onError != null) opts.onError?.(err);
- this.stopHeartbeat();
- });
- }
- }
-
- send(options : SendSocketMessageOptions) {
- const wsTask = this.ws;
- if (wsTask != null && this.isOpen) {
- console.log('send:', options)
- // 兼容 uni-app-x send API,支持 success/fail 回调
- // 只允许 SendSocketMessageOptions 类型,避免 UTSJSONObject 混用
- let sendData : any = options.data;
- // 若 data 不是字符串,自动序列化
- if (typeof sendData !== 'string') {
- sendData = JSON.stringify(sendData);
- }
- options.success ?? ((res) => {
- if (typeof options.success == 'function') options.success?.(res)
- })
- options.fail ?? ((err : any) => {
- console.log(err)
- const opts = this.options;
- if (opts != null && opts.onError != null) opts.onError?.(err);
- })
- wsTask.send(options);
- }
-
- }
-
- close(options : CloseSocketOptions) {
- this.ws?.close(options);
- }
-
- /**
- * 订阅 Postgres 变更事件(如 INSERT/UPDATE/DELETE)
- * @param params { event: 'INSERT'|'UPDATE'|'DELETE', schema: string, table: string, onChange: (payload: any) => void }
- */
- /**
- * 订阅 Postgres 变更事件(如 INSERT/UPDATE/DELETE)
- * @param params { event: 'INSERT'|'UPDATE'|'DELETE', schema: string, table: string, onChange: (payload: any) => void }
- */
- /**
- * 订阅 Postgres 变更事件(如 INSERT/UPDATE/DELETE)
- * @param params { event: 'INSERT'|'UPDATE'|'DELETE', schema: string, table: string, onChange: (payload: any) => void }
- */
- /**
- * 订阅 Postgres 变更事件(如 INSERT/UPDATE/DELETE)
- * @param params { event: 'INSERT'|'UPDATE'|'DELETE', schema: string, table: string, onChange: (payload: any) => void }
- */
- /**
- * 订阅 Postgres 变更事件(如 INSERT/UPDATE/DELETE)
- * @param params { event: 'INSERT'|'UPDATE'|'DELETE', schema: string, table: string, onChange: (payload: any) => void }
- */
- public subscribePostgresChanges(params : PostgresChangesSubscribeParams) : void {
- const opts = this.options;
- if (this.isOpen !== true || opts == null) {
- throw new Error('WebSocket 未连接');
- }
- const topic = params.topic != null && params.topic !== '' ? params.topic : `realtime:${params.schema}:${params.table}`;
- this.joinTopicIfNeeded(topic, params);
- this.listeners.push({
- topic: topic,
- event: params.event,
- schema: params.schema,
- table: params.table,
- filter: params.filter != null ? params.filter : null,
- onChange: params.onChange
- });
- }
-
- startHeartbeat() {
- this.stopHeartbeat();
- console.log('make heartbeat')
- // 每 30 秒发送一次 heartbeat(官方建议)
- this.heartbeatTimer = setInterval(() => {
- console.log('should startHeartbeat')
- if (this.isOpen && this.ws != null) {
- const heartbeatMsg = {
- topic: 'phoenix',
- event: 'heartbeat',
- payload: {},
- ref: Date.now().toString()
- };
- this.send({ data: JSON.stringify(heartbeatMsg) });
- }
- }, 30000);
- }
-
- stopHeartbeat() {
- console.log('stop heartbeat')
- if (typeof this.heartbeatTimer == 'number' && this.heartbeatTimer > 0) {
- clearInterval(this.heartbeatTimer as number);
- this.heartbeatTimer = 0;
- }
- }
-
- private joinTopicIfNeeded(topic : string, params : PostgresChangesSubscribeParams) {
- if (topic == null || topic == '') return;
- if (this.joinedTopics.has(topic)) return;
-
- const changeConfig : any = (params.filter != null && params.filter !== '') ? {
- event: params.event,
- schema: params.schema,
- table: params.table,
- filter: params.filter
- } : {
- event: params.event,
- schema: params.schema,
- table: params.table
- };
-
- const joinMsg = {
- event: 'phx_join',
- payload: {
- config: {
- broadcast: { self: false, ack: false },
- postgres_changes: [changeConfig],
- presence: { key: '', enabled: false },
- private: false
- },
- access_token: this.options != null && this.options.token != null ? this.options.token : null
- },
- ref: Date.now().toString(),
- topic: topic
- };
- this.send({ data: JSON.stringify(joinMsg) });
- this.joinedTopics.add(topic);
- }
-
- private dispatchPostgresChange(data : UTSJSONObject) : void {
- if (data.event !== 'postgres_changes') return;
- const topic = typeof data.topic == 'string' ? data.topic : '';
- const payload = data.payload as UTSJSONObject | null;
- if (payload == null) return;
- const dataSection = payload.get('data') as UTSJSONObject | null;
- let payloadEvent = payload.getString('event') as string | null;
- if ((payloadEvent == null || payloadEvent == '') && dataSection != null) {
- const typeValue = dataSection.getString('type') as string | null;
- if (typeValue != null && typeValue !== '') payloadEvent = typeValue;
- }
- let schemaName = payload.getString('schema') as string | null;
- if ((schemaName == null || schemaName == '') && dataSection != null) {
- const dataSchema = dataSection.getString('schema') as string | null;
- if (dataSchema != null && dataSchema !== '') schemaName = dataSchema;
- }
- let tableName = payload.getString('table') as string | null;
- if ((tableName == null || tableName == '') && dataSection != null) {
- const dataTable = dataSection.getString('table') as string | null;
- if (dataTable != null && dataTable !== '') tableName = dataTable;
- }
- const filterValue = payload.getString('filter') as string | null;
- for (let i = 0; i < this.listeners.length; i++) {
- const listener = this.listeners[i];
- if (listener.topic !== topic) continue;
- if (listener.event !== '*' && payloadEvent != null && listener.event !== payloadEvent) continue;
- if (schemaName != null && listener.schema !== schemaName) continue;
- if (tableName != null && listener.table !== tableName) continue;
- if (
- listener.filter != null && listener.filter !== '' &&
- filterValue != null && listener.filter !== filterValue
- ) continue;
- if (typeof listener.onChange == 'function') {
- const changeData = dataSection != null ? dataSection : payload;
- listener.onChange(changeData);
- }
- }
- }
-}
-
-export default AkSupaRealtime;
\ No newline at end of file
diff --git a/mall/components/supadb/docs/CHANGELOG.md b/mall/components/supadb/docs/CHANGELOG.md
deleted file mode 100644
index 9c6fef1e..00000000
--- a/mall/components/supadb/docs/CHANGELOG.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# SupaDB 文档更新记录
-
-## 2026-01-30
-
-### AkSupa:从本地持久化 token 恢复 user/session
-
-- **文件**:`components/supadb/aksupa.uts`
-- **位置**:`export class AkSupa` -> `constructor(baseUrl: string, apikey: string)`,以及新增方法 `hydrateSessionFromStorage()`
-- **定位标记**:在代码中搜索 `// [CHANGE][2026-01-30]`
-
-#### 修改了什么
-
-- 在 `AkSupa` 构造时,会尝试基于本地已持久化的 token(由 `AkReq.setToken` 写入 storage)恢复登录态。
-- 新增 `hydrateSessionFromStorage()`:
- - 通过 `AkReq.getToken()` 读取本地 access token
- - 若 token 存在,则请求 `GET {baseUrl}/auth/v1/user`
- - 将返回的 user 写入 `this.user`
- - 若 `this.session` 为空,则补齐一个最小 session 对象,使 `getSession()` 在「重启 App / 刷新页面」后仍能正确反映登录状态
-
-#### 为什么要改
-
-此前 `AkReq` 会把 token 持久化到本地,但 `AkSupa` 启动时不会自动恢复 `this.user` / `this.session`,导致即使 token 仍有效,`getSession()` 也可能返回 `{ session: null, user: null }`,从而使依赖登录态的页面判断失败。
diff --git a/mall/components/supadb/docs/SIMPLIFIED_API_GUIDE.md b/mall/components/supadb/docs/SIMPLIFIED_API_GUIDE.md
deleted file mode 100644
index fb888a19..00000000
--- a/mall/components/supadb/docs/SIMPLIFIED_API_GUIDE.md
+++ /dev/null
@@ -1,155 +0,0 @@
-# AkSupa 简化API指南
-
-## 概述
-
-AkSupa 现在采用了**简化的单一方法**设计:只提供 `executeAs()` 方法进行类型安全的数据访问,移除了所有冗余的类型转换方法。
-
-## 重要变化
-
-### 🚫 已移除的方法
-- `selectAs()`
-- `insertAs()`
-- `updateAs()`
-- `deleteAs()`
-- `rpcAs()`
-
-### ✅ 统一的方法
-- `executeAs()` - 唯一的类型转换方法
-
-## 设计理念
-
-### 简洁性原则
-- **一个方法解决所有问题**:所有查询操作最终都要调用 `execute()`,`executeAs()` 是其类型安全版本
-- **减少API复杂性**:不需要记住多个不同的方法名
-- **保持一致性**:无论是查询、插入、更新还是删除,都使用相同的方法
-
-### 链式友好
-```typescript
-// 所有操作都遵循相同的模式
-const result = await supa
- .from('table')
- .operation() // select(), insert(), update(), delete(), rpc()
- .conditions() // eq(), gt(), like(), etc.
- .executeAs(); // 统一的类型转换方法
-```
-
-## 使用示例
-
-### 查询数据
-```typescript
-// 多条记录
-const users = await supa
- .from('users')
- .select('*')
- .eq('status', 'active')
- .executeAs();
-
-// 单条记录
-const user = await supa
- .from('users')
- .select('*')
- .eq('id', 1)
- .single()
- .executeAs();
-```
-
-### 插入数据
-```typescript
-const newUser = await supa
- .from('users')
- .insert({
- name: 'John',
- email: 'john@example.com'
- })
- .executeAs();
-```
-
-### 更新数据
-```typescript
-const updatedUser = await supa
- .from('users')
- .update({ name: 'Jane' })
- .eq('id', 1)
- .executeAs();
-```
-
-### 删除数据
-```typescript
-const deletedUser = await supa
- .from('users')
- .delete()
- .eq('id', 1)
- .executeAs();
-```
-
-### RPC调用
-```typescript
-const result = await supa
- .from('any_table')
- .rpc('my_function', { param1: 'value1' })
- .executeAs();
-```
-
-## 平台兼容性
-
-| 平台 | 类型转换机制 | 说明 |
-|------|-------------|------|
-| Android | `UTSJSONObject.parse()` | 真正的类型转换 |
-| HarmonyOS | `UTSJSONObject.parse()` | 真正的类型转换 |
-| Web/iOS | `as T` | 类型断言 |
-
-## 从旧版本迁移
-
-### 旧代码
-```typescript
-// 旧方式 - 多个方法
-const users = await supa.selectAs('users', null, { limit: 10 });
-const newUser = await supa.insertAs('users', userData);
-const updated = await supa.updateAs('users', filter, updateData);
-```
-
-### 新代码
-```typescript
-// 新方式 - 统一方法
-const users = await supa
- .from('users')
- .select('*')
- .limit(10)
- .executeAs();
-
-const newUser = await supa
- .from('users')
- .insert(userData)
- .executeAs();
-
-const updated = await supa
- .from('users')
- .update(updateData)
- .eq('id', userId)
- .executeAs();
-```
-
-## 优势
-
-1. **API简洁**:只需要记住一个方法
-2. **类型安全**:TypeScript 编译时检查
-3. **平台兼容**:Android/HarmonyOS 使用真正的类型转换
-4. **链式友好**:与现有的链式方法无缝集成
-5. **维护性强**:单一方法,减少维护成本
-
-## 注意事项
-
-1. **泛型类型**:确保传入正确的类型参数 ``
-2. **错误处理**:检查 `result.error` 和 `result.data` 的有效性
-3. **性能考虑**:Android 平台的类型转换有轻微性能开销
-4. **调试模式**:开发时会有转换过程的控制台输出
-
-## 总结
-
-通过采用单一的 `executeAs()` 方法,AkSupa 现在提供了:
-- 更简洁的API
-- 更好的类型安全
-- 更一致的使用体验
-- 更容易维护的代码
-
-这个设计遵循了"简单就是美"的原则,让开发者能够更专注于业务逻辑而不是API的复杂性。
diff --git a/mall/components/supadb/docs/TYPED_QUERIES_README.md b/mall/components/supadb/docs/TYPED_QUERIES_README.md
deleted file mode 100644
index b32b64d9..00000000
--- a/mall/components/supadb/docs/TYPED_QUERIES_README.md
+++ /dev/null
@@ -1,194 +0,0 @@
-# AkSupa executeAs() 类型转换功能
-
-## 概述
-
-AkSupa 现在提供简洁的 `executeAs()` 方法,支持链式请求的类型转换功能,可以直接返回指定的类型而不仅仅是 `UTSJSONObject`。
-
-## 设计理念
-
-遵循 **简洁性原则**,只提供一个 `executeAs()` 方法来处理所有类型转换需求,因为:
-
-1. **统一API**:所有操作最终都通过 `execute()` 处理,`executeAs()` 是其类型安全版本
-2. **链式友好**:可以与所有现有的链式方法无缝组合
-3. **易于理解**:只需记住一个方法,降低学习成本
-4. **功能完整**:覆盖查询、插入、更新、删除、RPC 等所有操作
-
-## 平台兼容性
-
-| 平台 | 支持方式 | 说明 |
-|------|----------|------|
-| Android (uni-app x 3.90+) | `UTSJSONObject.parse()` | 真正的类型转换 |
-| Web | `as T` | 类型断言,编译时类型提示 |
-| iOS | `as T` | 类型断言,编译时类型提示 |
-| HarmonyOS (4.61+) | `UTSJSONObject.parse()` | 真正的类型转换 |
-
-## 方法签名
-
-```typescript
-async executeAs() : Promise>
-```
-
-## 使用示例
-
-### 1. 定义数据类型
-
-```typescript
-export type User = {
- id: number;
- name: string;
- email: string;
- created_at: string;
- avatar_url?: string;
-}
-```
-
-### 2. 查询操作
-
-```typescript
-// 查询多条记录
-const usersResult = await supa
- .from('users')
- .select('*')
- .eq('status', 'active')
- .limit(10)
- .executeAs();
-
-// 查询单条记录
-const userResult = await supa
- .from('users')
- .select('*')
- .eq('id', 1)
- .single()
- .executeAs();
-
-// 复杂查询
-const complexQuery = await supa
- .from('posts')
- .select('*, users!posts_user_id_fkey(*)')
- .eq('status', 'published')
- .gt('created_at', '2024-01-01')
- .order('created_at', { ascending: false })
- .limit(20)
- .executeAs();
-```
-
-### 3. 插入操作
-
-```typescript
-const newUser = {
- name: '新用户',
- email: 'newuser@example.com'
-} as UTSJSONObject;
-
-const insertResult = await supa
- .from('users')
- .insert(newUser)
- .executeAs();
-```
-
-### 4. 更新操作
-
-```typescript
-const updateResult = await supa
- .from('users')
- .update({ name: '更新的名称' } as UTSJSONObject)
- .eq('id', 1)
- .executeAs();
-```
-
-### 5. 删除操作
-
-```typescript
-const deleteResult = await supa
- .from('users')
- .delete()
- .eq('id', 1)
- .executeAs();
-```
-
-### 6. RPC 调用
-
-```typescript
-const rpcResult = await supa
- .from('') // RPC 不需要 table
- .rpc('get_user_stats', { user_id: 1 } as UTSJSONObject)
- .executeAs<{ total_posts: number; total_likes: number }>();
-```
-
-## 错误处理
-
-```typescript
-try {
- const result = await supa
- .from('users')
- .select('*')
- .executeAs();
-
- if (result.error) {
- console.error('查询失败:', result.error);
- return;
- }
-
- // 使用类型化的数据
- const users = result.data;
- if (users != null) {
- users.forEach(user => {
- // 现在有完整的类型提示
- console.log(user.name, user.email);
- });
- }
-} catch (error) {
- console.error('请求异常:', error);
-}
-```
-
-## 向后兼容性
-
-- 原有的 `execute()` 方法依然保持不变,返回 `UTSJSONObject`
-- 所有原有的链式方法都继续正常工作
-- `executeAs()` 是附加功能,不影响现有代码
-
-## 对比旧版本
-
-### 旧版本(多方法)
-```typescript
-// 需要记住多个方法
-const users = await supa.selectAs('users', filter, options);
-const inserted = await supa.insertAs('users', data);
-const updated = await supa.updateAs('users', filter, values);
-const deleted = await supa.deleteAs('users', filter);
-const rpcResult = await supa.rpcAs('func_name', params);
-```
-
-### 新版本(统一方法)
-```typescript
-// 只需记住一个 executeAs() 方法
-const users = await supa.from('users').select('*').executeAs();
-const inserted = await supa.from('users').insert(data).executeAs();
-const updated = await supa.from('users').update(values).eq('id', 1).executeAs();
-const deleted = await supa.from('users').delete().eq('id', 1).executeAs();
-const rpcResult = await supa.from('').rpc('func_name', params).executeAs();
-```
-
-## 优势
-
-1. **API 简洁**:只需要记住一个 `executeAs()` 方法
-2. **链式友好**:与所有现有方法完美组合
-3. **类型安全**:编译时检查 + 运行时转换(Android)
-4. **易于维护**:减少重复代码,统一处理逻辑
-5. **学习成本低**:从 `execute()` 到 `executeAs()` 自然过渡
-
-## 注意事项
-
-1. `UTSJSONObject.parse()` 仅在 Android 3.90+ 和 HarmonyOS 4.61+ 平台支持
-2. 其他平台使用类型断言,主要提供编译时类型检查
-3. 类型转换失败时会 fallback 到原始数据
-4. 建议在生产环境中进行充分的测试
-
-## 技术实现
-
-`executeAs()` 内部:
-1. 调用原有的 `execute()` 方法获取结果
-2. 在 Android 平台使用 `UTSJSONObject.parse()` 进行类型转换
-3. 在其他平台使用类型断言提供类型提示
-4. 返回类型化的 `AkReqResponse` 结果
diff --git a/mall/components/supadb/docs/TYPE_CONVERSION_FIX_SUMMARY.md b/mall/components/supadb/docs/TYPE_CONVERSION_FIX_SUMMARY.md
deleted file mode 100644
index b0a213a6..00000000
--- a/mall/components/supadb/docs/TYPE_CONVERSION_FIX_SUMMARY.md
+++ /dev/null
@@ -1,126 +0,0 @@
-# AkSupa 类型转换错误修复总结
-
-## 问题描述
-
-在实现 `executeAs()` 和相关类型转换方法时,遇到了以下 UTS 编译错误:
-
-1. **泛型类型参数错误**:`Cannot use 'T' as reified type parameter`
-2. **类型推断错误**:`推断类型是T?(可为空的T),但预期的是Any`
-3. **方法参数错误**:`Too many arguments for public open fun select`
-4. **属性访问错误**:`Unresolved reference: data`
-
-## 修复方案
-
-### 1. 移除泛型类型参数
-
-**问题**:UTS 不支持 `UTSJSONObject.parse()` 这种带泛型参数的调用方式。
-
-**解决方案**:
-- 将 `item.parse()` 改为 `item.parse()`
-- 将 `result.data.parse()` 改为 `result.data.parse()`
-- 使用类型断言 `as T` 来提供类型提示
-
-```typescript
-// 修复前
-convertedData = result.data.parse();
-
-// 修复后
-convertedData = result.data.parse();
-```
-
-### 2. 简化方法签名
-
-**问题**:`_convertResponse()` 方法的泛型签名在 UTS 中无法正确处理。
-
-**解决方案**:
-- 将 `_convertResponse()` 改为 `_convertResponse()`
-- 返回类型改为 `AkReqResponse`
-- 在调用处使用类型断言 `as AkReqResponse`
-
-```typescript
-// 修复前
-private _convertResponse(result: AkReqResponse): AkReqResponse
-
-// 修复后
-private _convertResponse(result: AkReqResponse): AkReqResponse
-```
-
-### 3. 统一类型处理
-
-**问题**:不同平台的类型处理逻辑不一致。
-
-**解决方案**:
-- Android 平台:使用 `UTSJSONObject.parse()` 进行真正的类型转换
-- 其他平台:直接返回原始结果,通过类型断言提供类型提示
-
-```typescript
-// Android 平台
-convertedData = result.data.parse();
-
-// 其他平台
-return result; // 直接返回原始结果
-```
-
-### 4. 空值处理优化
-
-**问题**:`parse()` 方法可能返回 `null`,需要安全处理。
-
-**解决方案**:
-- 增加 `null` 检查:`parsed != null ? parsed : item`
-- 保持原始数据作为 fallback
-
-```typescript
-const parsed = item.parse();
-convertedArray.push(parsed != null ? parsed : item);
-```
-
-## 修复的方法列表
-
-### AkSupaQueryBuilder 类
-- ✅ `executeAs()` - 链式查询的类型转换执行
-
-### AkSupa 类
-- ✅ `selectAs()` - 查询并类型转换
-- ✅ `insertAs()` - 插入并类型转换
-- ✅ `updateAs()` - 更新并类型转换
-- ✅ `deleteAs()` - 删除并类型转换
-- ✅ `rpcAs()` - RPC调用并类型转换
-- ✅ `_convertResponse()` - 私有类型转换方法
-
-## 平台兼容性
-
-| 平台 | 处理方式 | 效果 |
-|------|----------|------|
-| Android | `UTSJSONObject.parse()` | 真正的类型转换 |
-| iOS | 类型断言 `as T` | 编译时类型检查 |
-| Web | 类型断言 `as T` | 编译时类型检查 |
-| HarmonyOS | `UTSJSONObject.parse()` | 真正的类型转换 |
-
-## 使用示例
-
-```typescript
-// 现在可以正常使用了
-const users = await supa
- .from('users')
- .select('*')
- .executeAs();
-
-// 类型安全的访问
-users.data?.forEach(user => {
- console.log(user.name); // 有完整的类型提示
-});
-
-// 直接方法调用
-const result = await supa.selectAs('users');
-```
-
-## 技术要点
-
-1. **UTS 限制**:不支持泛型的 reified 类型参数
-2. **类型安全**:通过编译时类型断言提供类型提示
-3. **运行时转换**:在支持的平台上进行真正的类型转换
-4. **向后兼容**:原有的 `.execute()` 方法保持不变
-
-## 总结
-
-修复后的代码在保持类型安全的同时,完全兼容 UTS 的编译要求。在 Android 和 HarmonyOS 平台上提供真正的类型转换,在其他平台上提供编译时类型检查,为开发者提供了更好的开发体验。
diff --git a/mall/components/supadb/docs/aksupareal.md b/mall/components/supadb/docs/aksupareal.md
deleted file mode 100644
index 546d1147..00000000
--- a/mall/components/supadb/docs/aksupareal.md
+++ /dev/null
@@ -1,56 +0,0 @@
-GET wss://ak3.oulog.com/realtime/v1/websocket?apikey=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q&vsn=1.0.0 HTTP/1.1
-Host: ak3.oulog.com
-Connection: Upgrade
-Pragma: no-cache
-Cache-Control: no-cache
-User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1
-Upgrade: websocket
-Origin: http://localhost:5174
-Sec-WebSocket-Version: 13
-Accept-Encoding: gzip, deflate, br, zstd
-Accept-Language: zh-CN,zh;q=0.9
-Sec-WebSocket-Key: dJtuVuI1PWGVjC2E/qCDbQ==
-Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
-
-HTTP/1.1 101 Switching Protocols
-Server: nginx
-Date: Thu, 03 Jul 2025 04:03:55 GMT
-Connection: upgrade
-cache-control: max-age=0, private, must-revalidate
-sec-websocket-accept: XzR5+Z20bTKH4Ytm23KUTpQmDKE=
-upgrade: websocket
-Access-Control-Allow-Origin: *
-X-Kong-Upstream-Latency: 1
-X-Kong-Proxy-Latency: 0
-Via: kong/2.8.1
-
-
-
-GET wss://ak3.oulog.com/realtime/v1/websocket?apikey=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q&vsn=1.0.0 HTTP/1.1
-Host: ak3.oulog.com
-Connection: Upgrade
-Pragma: no-cache
-Cache-Control: no-cache
-User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1
-Upgrade: websocket
-Origin: http://localhost:5173
-Sec-WebSocket-Version: 13
-Accept-Encoding: gzip, deflate, br, zstd
-Accept-Language: zh-CN,zh;q=0.9
-Sec-WebSocket-Key: ZNkWHFYshDAoPrErr9EY9w==
-Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
-
-HTTP/1.1 101 Switching Protocols
-Server: nginx
-Date: Thu, 03 Jul 2025 07:05:31 GMT
-Connection: upgrade
-cache-control: max-age=0, private, must-revalidate
-sec-websocket-accept: SV8HQ/NAJvS8eQcHVMmIdMRWcb4=
-upgrade: websocket
-Access-Control-Allow-Origin: *
-X-Kong-Upstream-Latency: 3
-X-Kong-Proxy-Latency: 1
-Via: kong/2.8.1
-
-
-
diff --git a/mall/components/supadb/rag.uts b/mall/components/supadb/rag.uts
deleted file mode 100644
index 6a4f1a30..00000000
--- a/mall/components/supadb/rag.uts
+++ /dev/null
@@ -1,36 +0,0 @@
-
-// const agent_id = "2bb9fa0cbae011efbf780242ac120006";
-const agent_id = "15b01b26128111f08cd30242ac120006";
-// const agent_id = "9eb32c5395d64ac48752b25efdd3b3bb";
-// const requrl = "https://rag.oulog.com/v1/canvas/completion";
-const requrl = "https://rag.oulog.com/api/v1/agents_openai/"+agent_id+"/chat/completions";
-// let beareaToken = "ImQwODRkOGJlZjI3ZjExZWZhZTZhMDI0MmFjMTIwMDA2Ig.Z7wduA.DEPPVfSZaP2MBKJN8vw14VxOXG0";
-import { RAG_API_KEY } from "@/ak/config";
-let beareaToken = RAG_API_KEY
-export function requestCanvasCompletion(question) {
- const new_uuid = `${Date.now()}${Math.floor(Math.random() * 1e7)}`
- const messages = [{"role": "user", "content": question}]
- return new Promise((resolve, reject) => {
- uni.request({
- url: requrl,
- method: "POST",
- data: {
- id: agent_id,
- messages: messages,
- stream: false,
- model:"deepseek-r1",
- message_id: new_uuid,
- },
- header: {
- "content-Type": "application/json",
- Authorization: 'Bearer '+beareaToken,
- },
- success: (res) => {
- resolve(res.data);
- },
- fail: (err) => {
- reject(err);
- },
- });
- });
-}
\ No newline at end of file
diff --git a/mall/components/supadb/raginstance.uts b/mall/components/supadb/raginstance.uts
deleted file mode 100644
index b7e8ee50..00000000
--- a/mall/components/supadb/raginstance.uts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { RagReq,RagReqConfig } from '@/uni_modules/rag-req/rag-req.uts'
-import { RAG_BASE_URL, RAG_API_KEY } from '@/ak/config.uts'
-
-const ragconfig = { baseUrl: RAG_BASE_URL, apiKey: RAG_API_KEY } as RagReqConfig
-const rag = new RagReq(ragconfig)
-
-export default rag
diff --git a/mall/components/supadb/supadb.uvue b/mall/components/supadb/supadb.uvue
deleted file mode 100644
index e99f568a..00000000
--- a/mall/components/supadb/supadb.uvue
+++ /dev/null
@@ -1,364 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/mall/components/supadb/typed-examples.uts b/mall/components/supadb/typed-examples.uts
deleted file mode 100644
index a42d3605..00000000
--- a/mall/components/supadb/typed-examples.uts
+++ /dev/null
@@ -1,122 +0,0 @@
-// 示例:如何使用 AkSupa 的 executeAs() 类型转换功能
-
-// 定义数据类型
-export type User = {
- id: number;
- name: string;
- email: string;
- created_at: string;
- avatar_url?: string;
-}
-
-export type Post = {
- id: number;
- title: string;
- content: string;
- user_id: number;
- created_at: string;
- updated_at: string;
-}
-
-// 使用示例
-import AkSupa from '@/components/supadb/aksupa.uts';
-
-export async function demonstrateTypedQueries() {
- const supa = new AkSupa('https://your-project.supabase.co', 'your-anon-key');
-
- // 1. 查询数据 - 使用链式调用 + executeAs()
- const usersResult = await supa
- .from('users')
- .select('*')
- .eq('status', 'active')
- .limit(10)
- .executeAs();
-
- // 现在 usersResult.data 是 User[] 类型,而不是 UTSJSONObject
- if (usersResult.data != null) {
- usersResult.data.forEach(user => {
- console.log(`用户: ${user.name}, 邮箱: ${user.email}`);
- });
- }
-
- // 2. 单条记录查询
- const userResult = await supa
- .from('users')
- .select('*')
- .eq('id', 1)
- .single()
- .executeAs();
-
- if (userResult.data != null) {
- console.log(`用户名: ${userResult.data.name}`);
- }
-
- // 3. 插入数据
- const newUser = {
- name: '新用户',
- email: 'newuser@example.com'
- } as UTSJSONObject;
-
- const insertResult = await supa
- .from('users')
- .insert(newUser)
- .executeAs();
-
- // 4. 更新数据
- const updateResult = await supa
- .from('users')
- .update({ name: '更新的名称' } as UTSJSONObject)
- .eq('id', 1)
- .executeAs();
-
- // 5. 删除数据
- const deleteResult = await supa
- .from('users')
- .delete()
- .eq('id', 1)
- .executeAs();
-
- // 6. RPC 调用
- const rpcResult = await supa
- .from('') // RPC 不需要 table
- .rpc('get_user_stats', { user_id: 1 } as UTSJSONObject)
- .executeAs<{ total_posts: number; total_likes: number }>();
-
- // 7. 复杂查询示例
- const complexQuery = await supa
- .from('posts')
- .select('*, users!posts_user_id_fkey(*)')
- .eq('status', 'published')
- .gt('created_at', '2024-01-01')
- .order('created_at', { ascending: false })
- .limit(20)
- .executeAs();
-
- return {
- users: usersResult.data,
- user: userResult.data,
- newUser: insertResult.data,
- updated: updateResult.data,
- deleted: deleteResult.data,
- stats: rpcResult.data,
- posts: complexQuery.data
- };
-}
-
-// 平台兼容性说明:
-//
-// Android 平台(uni-app x 3.90+):
-// - 使用 UTSJSONObject.parse() 进行真正的类型转换
-// - 数据会被正确解析为指定的类型 T
-// - 如果转换失败,会 fallback 到原始数据
-//
-// 其他平台(Web、iOS、HarmonyOS):
-// - 使用 as 进行类型断言
-// - 这只是 TypeScript 编译时的类型提示,运行时仍然是原始数据
-// - 但提供了更好的开发体验和类型安全
-//
-// 使用优势:
-// 1. 统一的 API - 只需要记住 executeAs() 一个方法
-// 2. 链式调用 - 可以和所有其他方法组合使用
-// 3. 类型安全 - 编译时类型检查,运行时类型转换(Android)
-// 4. 简洁明了 - 不需要多个 selectAs/insertAs/updateAs 等方法
diff --git a/mall/create_placeholder_pages.py b/mall/create_placeholder_pages.py
deleted file mode 100644
index d16ae674..00000000
--- a/mall/create_placeholder_pages.py
+++ /dev/null
@@ -1,177 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-"""
-批量创建 Admin 占位页面
-"""
-
-import os
-from pathlib import Path
-
-# 页面配置 (基于 adminRoutes.uts)
-pages_config = [
- # 首页 - 已存在,跳过
-
- # 用户模块
- {'path': 'pages/mall/admin/user/list.uvue', 'title': '用户管理', 'componentKey': 'UserList'},
- {'path': 'pages/mall/admin/user/level.uvue', 'title': '用户等级', 'componentKey': 'UserLevel'},
- {'path': 'pages/mall/admin/user/group.uvue', 'title': '用户分组', 'componentKey': 'UserGroup'},
- {'path': 'pages/mall/admin/user/label.uvue', 'title': '用户标签', 'componentKey': 'UserLabel'},
- {'path': 'pages/mall/admin/user/grade/type.uvue', 'title': '会员类型', 'componentKey': 'UserGradeType'},
- {'path': 'pages/mall/admin/user/grade/card.uvue', 'title': '卡密会员', 'componentKey': 'UserGradeCard'},
- {'path': 'pages/mall/admin/user/grade/record.uvue', 'title': '会员记录', 'componentKey': 'UserGradeRecord'},
- {'path': 'pages/mall/admin/user/grade/right.uvue', 'title': '会员权益', 'componentKey': 'UserGradeRight'},
-
- # 商品模块
- {'path': 'pages/mall/admin/product/list.uvue', 'title': '商品管理', 'componentKey': 'ProductList'},
- {'path': 'pages/mall/admin/product/classify.uvue', 'title': '商品分类', 'componentKey': 'ProductClassify'},
- {'path': 'pages/mall/admin/product/reply.uvue', 'title': '商品评论', 'componentKey': 'ProductReply'},
- {'path': 'pages/mall/admin/product/attr.uvue', 'title': '商品规格', 'componentKey': 'ProductAttr'},
- {'path': 'pages/mall/admin/product/param.uvue', 'title': '商品参数', 'componentKey': 'ProductParam'},
- {'path': 'pages/mall/admin/product/label.uvue', 'title': '商品标签', 'componentKey': 'ProductLabel'},
- {'path': 'pages/mall/admin/product/protection.uvue', 'title': '商品保障', 'componentKey': 'ProductProtection'},
-
- # 订单模块
- {'path': 'pages/mall/admin/order/list.uvue', 'title': '订单管理', 'componentKey': 'OrderList'},
-
- # 营销模块
- {'path': 'pages/mall/admin/marketing/coupon/list.uvue', 'title': '优惠券', 'componentKey': 'MarketingCoupon'},
- {'path': 'pages/mall/admin/marketing/integral/list.uvue', 'title': '积分管理', 'componentKey': 'MarketingIntegral'},
- {'path': 'pages/mall/admin/marketing/bargain/list.uvue', 'title': '砍价活动', 'componentKey': 'MarketingBargain'},
- {'path': 'pages/mall/admin/marketing/combination/list.uvue', 'title': '拼团活动', 'componentKey': 'MarketingCombination'},
- {'path': 'pages/mall/admin/marketing/seckill/list.uvue', 'title': '秒杀活动', 'componentKey': 'MarketingSeckill'},
-
- # 内容模块
- {'path': 'pages/mall/admin/cms/article/list.uvue', 'title': '文章管理', 'componentKey': 'CmsArticle'},
- {'path': 'pages/mall/admin/cms/category/list.uvue', 'title': '文章分类', 'componentKey': 'CmsCategory'},
-
- # 财务模块
- {'path': 'pages/mall/admin/finance/record.uvue', 'title': '财务记录', 'componentKey': 'FinanceRecord'},
-
- # 数据统计模块
- {'path': 'pages/mall/admin/statistic/index.uvue', 'title': '数据概览', 'componentKey': 'StatisticIndex'},
-
- # 设置模块
- {'path': 'pages/mall/admin/setting/system/config.uvue', 'title': '系统配置', 'componentKey': 'SettingSystemConfig'},
- {'path': 'pages/mall/admin/setting/system/admin.uvue', 'title': '管理员管理', 'componentKey': 'SettingSystemAdmin'},
- {'path': 'pages/mall/admin/setting/system/role.uvue', 'title': '角色管理', 'componentKey': 'SettingSystemRole'},
-]
-
-# 占位页面模板
-template = '''
-
-
-
-
-
- 页面占位
- 该功能模块正在开发中
- 当前采用 CRMEB 路由体系 1:1 映射
-
-
-
-
-
-
-
-
-'''
-
-def create_placeholder_pages():
- """创建所有占位页面"""
- base_dir = Path(r'd:\骅锋\mall')
- created_count = 0
- skipped_count = 0
-
- for page in pages_config:
- file_path = base_dir / page['path']
-
- # 如果文件已存在,跳过
- if file_path.exists():
- print(f'[跳过] {page["path"]} - 文件已存在')
- skipped_count += 1
- continue
-
- # 创建目录
- file_path.parent.mkdir(parents=True, exist_ok=True)
-
- # 生成文件内容
- content = template.format(
- title=page['title'],
- componentKey=page['componentKey']
- )
-
- # 写入文件
- with open(file_path, 'w', encoding='utf-8') as f:
- f.write(content)
-
- print(f'[创建] {page["path"]}')
- created_count += 1
-
- print(f'\n完成! 创建 {created_count} 个文件, 跳过 {skipped_count} 个文件')
-
-if __name__ == '__main__':
- create_placeholder_pages()
diff --git a/mall/doc_mall/FRONTEND_BACKEND_DEBUGGING.md b/mall/doc_mall/FRONTEND_BACKEND_DEBUGGING.md
deleted file mode 100644
index e08d77c7..00000000
--- a/mall/doc_mall/FRONTEND_BACKEND_DEBUGGING.md
+++ /dev/null
@@ -1,875 +0,0 @@
-# 🔧 前端与后端联调指南
-
-## 📋 目录
-1. [联调环境配置](#联调环境配置)
-2. [本地开发环境搭建](#本地开发环境搭建)
-3. [前端连接后端](#前端连接后端)
-4. [调试工具和方法](#调试工具和方法)
-5. [常见联调场景](#常见联调场景)
-6. [问题排查](#问题排查)
-
----
-
-## 一、联调环境配置
-
-### 1.1 环境类型
-
-#### 开发环境 (Development)
-- **Supabase 本地实例**: Docker Compose 运行在 `192.168.0.150:8080`
-- **Supabase 云服务**: 使用开发项目
-- **前端**: uni-app-x 开发模式
-
-#### 生产环境 (Production)
-- **Supabase 云服务**: 生产项目
-- **前端**: 编译后的应用
-
-### 1.2 配置文件位置
-
-#### 前端配置
-**文件**: `ak/config.uts`
-
-```typescript
-// 开发环境 - 本地 Supabase
-export const SUPA_URL: string = 'http://192.168.0.150:8080'
-export const SUPA_KEY: string = 'your-anon-key'
-
-// 生产环境 - Supabase 云服务
-export const SUPA_URL: string = 'https://ak3.oulog.com'
-export const SUPA_KEY: string = 'your-anon-key'
-
-// WebSocket 实时连接
-export const WS_URL: string = 'wss://ak3.oulog.com/realtime/v1/websocket'
-```
-
-#### 后端配置 (Docker)
-**文件**: `doc_chat/supa.env`
-
-```env
-# Supabase 本地配置
-POSTGRES_HOST=db
-POSTGRES_DB=postgres
-POSTGRES_PORT=5432
-POSTGRES_PASSWORD=your-password
-
-# API 配置
-KONG_HTTP_PORT=8000
-KONG_HTTPS_PORT=8443
-
-# Auth 配置
-API_EXTERNAL_URL=http://localhost:8000
-SITE_URL=http://localhost:3000
-```
-
----
-
-## 二、本地开发环境搭建
-
-### 2.1 Supabase 本地实例启动
-
-#### 方式一: Docker Compose (推荐)
-
-```bash
-# 1. 进入 Supabase 目录
-cd doc_chat
-
-# 2. 启动 Supabase 服务
-docker-compose -f supa-docker-compose.yml up -d
-
-# 3. 检查服务状态
-docker-compose -f supa-docker-compose.yml ps
-
-# 4. 查看日志
-docker-compose -f supa-docker-compose.yml logs -f
-```
-
-**服务端口**:
-- **API**: `http://localhost:8000` 或 `http://192.168.0.150:8080`
-- **PostgreSQL**: `localhost:5432`
-- **Dashboard**: `http://localhost:3000`
-
-#### 方式二: Supabase CLI
-
-```bash
-# 1. 安装 Supabase CLI
-npm install -g supabase
-
-# 2. 初始化项目
-supabase init
-
-# 3. 启动本地实例
-supabase start
-
-# 4. 查看服务信息
-supabase status
-```
-
-### 2.2 数据库初始化
-
-```bash
-# 1. 执行商城数据库脚本
-psql -h localhost -U postgres -d postgres -f doc_mall/database/complete_mall_database.sql
-
-# 或使用 Supabase Dashboard SQL Editor
-# 1. 打开 http://localhost:3000
-# 2. 进入 SQL Editor
-# 3. 复制粘贴 complete_mall_database.sql 内容
-# 4. 执行脚本
-
-# 2. 插入模拟数据 (可选)
-psql -h localhost -U postgres -d postgres -f doc_mall/database/mock_data_insert.sql
-
-# 3. 验证数据库
-psql -h localhost -U postgres -d postgres -f doc_mall/database/validation_test.sql
-```
-
-### 2.3 前端开发环境
-
-```bash
-# 1. 安装依赖 (如果使用 npm)
-npm install
-
-# 2. 启动 uni-app-x 开发服务器
-# 在 HBuilderX 中:
-# - 运行 -> 运行到浏览器/手机模拟器
-# - 或使用命令行工具
-
-# 3. 配置开发环境
-# 修改 ak/config.uts 中的 SUPA_URL 和 SUPA_KEY
-```
-
----
-
-## 三、前端连接后端
-
-### 3.1 Supabase 客户端初始化
-
-#### 全局单例模式
-**文件**: `components/supadb/aksupainstance.uts`
-
-```typescript
-import AkSupa from './aksupa.uts'
-import { SUPA_URL, SUPA_KEY } from '@/ak/config.uts'
-
-// 创建全局 Supabase 客户端实例
-const supa = new AkSupa(SUPA_URL, SUPA_KEY)
-
-// 自动登录 (开发环境)
-const supaReady: Promise = (async () => {
- try {
- await supa.signIn('test@example.com', 'password')
- return true
- } catch (err) {
- console.error('Supabase auto sign-in failed', err)
- return false
- }
-})()
-
-export { supaReady }
-export default supa
-```
-
-#### 在页面中使用
-
-```typescript
-// pages/mall/consumer/index.uvue
-
-```
-
-### 3.2 API 调用方式
-
-#### 3.2.1 查询数据 (SELECT)
-
-```typescript
-// 简单查询
-const res = await supa.select('ml_products', null, {
- limit: 10,
- order: 'created_at.desc'
-})
-
-// 带过滤条件
-const res = await supa.select('ml_products', {
- status: 1,
- category_id: categoryId
-}, {
- limit: 20,
- order: 'sale_count.desc'
-})
-
-// 复杂过滤 (PostgREST 操作符)
-const res = await supa.select('ml_products', {
- base_price: { gte: 100, lte: 500 },
- name: { ilike: '%商品%' },
- category_id: { in: [id1, id2, id3] }
-}, {
- limit: 20
-})
-
-// 单条记录
-const res = await supa.select('ml_products', { id: productId }, {
- single: true
-})
-
-// 选择特定字段
-const res = await supa.select('ml_products', null, {
- columns: 'id,name,base_price,main_image_url',
- limit: 20
-})
-```
-
-#### 3.2.2 插入数据 (INSERT)
-
-```typescript
-// 插入订单
-const orderRes = await supa.insert('ml_orders', {
- user_id: userId,
- merchant_id: merchantId,
- total_amount: 100.00,
- order_status: 1,
- payment_status: 1,
- shipping_status: 1,
- shipping_address: {
- receiver_name: '张三',
- receiver_phone: '13800138000',
- address_detail: '北京市朝阳区xxx'
- }
-})
-
-// 批量插入
-const items = [
- { order_id: orderId, product_id: productId1, quantity: 2 },
- { order_id: orderId, product_id: productId2, quantity: 1 }
-]
-const itemsRes = await supa.insert('ml_order_items', items)
-```
-
-#### 3.2.3 更新数据 (UPDATE)
-
-```typescript
-// 更新商品状态
-await supa.update('ml_products',
- { id: productId }, // 过滤条件
- {
- status: 2, // 下架
- updated_at: new Date().toISOString()
- }
-)
-
-// 更新订单状态
-await supa.update('ml_orders',
- { id: orderId },
- {
- order_status: 2, // 待发货
- updated_at: new Date().toISOString()
- }
-)
-```
-
-#### 3.2.4 删除数据 (DELETE)
-
-```typescript
-// 删除收藏
-await supa.delete('ml_user_favorites', { id: favoriteId })
-
-// 删除购物车商品
-await supa.delete('ml_shopping_cart', {
- user_id: userId,
- product_id: productId
-})
-```
-
-#### 3.2.5 调用数据库函数 (RPC)
-
-```typescript
-// 计算购物车总金额
-const totalRes = await supa.rpc('calculate_cart_total', {
- p_user_id: userId
-})
-
-// 生成订单号
-const orderNoRes = await supa.rpc('generate_order_no')
-
-// 获取用户默认地址
-const addressRes = await supa.rpc('get_user_default_address', {
- p_user_id: userId
-})
-```
-
-### 3.3 链式查询构建器
-
-```typescript
-// 使用链式 API
-const res = await supa
- .from('ml_products')
- .eq('status', 1)
- .gte('base_price', 100)
- .lte('base_price', 500)
- .like('name', '%商品%')
- .order('created_at', { ascending: false })
- .limit(20)
- .select()
-```
-
----
-
-## 四、调试工具和方法
-
-### 4.1 浏览器开发者工具
-
-#### 网络请求调试
-1. **打开 Chrome DevTools** (F12)
-2. **Network 标签页**
- - 查看所有 HTTP 请求
- - 检查请求 URL、Headers、Body
- - 查看响应状态码、数据
-
-3. **Console 标签页**
- - 查看 `console.log()` 输出
- - 查看错误信息
- - 执行调试代码
-
-#### 示例: 检查 API 请求
-
-```typescript
-// 在代码中添加日志
-console.log('请求商品列表:', {
- table: 'ml_products',
- filter: { status: 1 },
- options: { limit: 20 }
-})
-
-const res = await supa.select('ml_products', { status: 1 }, { limit: 20 })
-
-console.log('API 响应:', {
- success: res.success,
- data: res.data,
- error: res.error,
- status: res.status
-})
-```
-
-### 4.2 Supabase Dashboard
-
-#### 实时查看数据
-1. **Table Editor**
- - 查看表数据
- - 手动编辑数据
- - 验证数据是否正确
-
-2. **SQL Editor**
- - 执行 SQL 查询
- - 测试数据库函数
- - 验证 RLS 策略
-
-3. **API Logs**
- - 查看 API 请求日志
- - 检查错误信息
- - 分析性能问题
-
-#### 示例: 测试查询
-
-```sql
--- 在 Supabase Dashboard SQL Editor 中执行
-SELECT * FROM ml_products
-WHERE status = 1
-ORDER BY created_at DESC
-LIMIT 20;
-
--- 测试 RLS 策略
-SET ROLE authenticated;
-SET request.jwt.claim.sub = 'user-uuid-here';
-SELECT * FROM ml_user_profiles;
-```
-
-### 4.3 Postman / Insomnia
-
-#### 直接测试 Supabase API
-
-```http
-# 获取商品列表
-GET https://your-project.supabase.co/rest/v1/ml_products?status=eq.1&limit=20
-Headers:
- apikey: your-anon-key
- Authorization: Bearer your-jwt-token
- Content-Type: application/json
-
-# 创建订单
-POST https://your-project.supabase.co/rest/v1/ml_orders
-Headers:
- apikey: your-anon-key
- Authorization: Bearer your-jwt-token
- Content-Type: application/json
- Prefer: return=representation
-Body:
-{
- "user_id": "user-uuid",
- "merchant_id": "merchant-uuid",
- "total_amount": 100.00,
- "order_status": 1
-}
-
-# 调用 RPC 函数
-POST https://your-project.supabase.co/rest/v1/rpc/calculate_cart_total
-Headers:
- apikey: your-anon-key
- Authorization: Bearer your-jwt-token
- Content-Type: application/json
-Body:
-{
- "p_user_id": "user-uuid"
-}
-```
-
-### 4.4 数据库客户端工具
-
-#### pgAdmin / DBeaver / DataGrip
-
-```sql
--- 直接连接 PostgreSQL 数据库
--- Host: localhost (或 192.168.0.150)
--- Port: 5432
--- Database: postgres
--- User: postgres
--- Password: (从 supa.env 获取)
-
--- 查看表结构
-SELECT * FROM information_schema.tables
-WHERE table_schema = 'public' AND table_name LIKE 'ml_%';
-
--- 查看数据
-SELECT * FROM ml_products LIMIT 10;
-
--- 查看 RLS 策略
-SELECT * FROM pg_policies WHERE tablename = 'ml_products';
-```
-
-### 4.5 uni-app-x 调试
-
-#### HBuilderX 调试工具
-1. **控制台输出**
- - 查看 `console.log()` 输出
- - 查看错误堆栈
-
-2. **网络请求监控**
- - 查看所有网络请求
- - 检查请求参数和响应
-
-3. **断点调试**
- - 在代码中设置断点
- - 单步执行
- - 查看变量值
-
----
-
-## 五、常见联调场景
-
-### 5.1 场景一: 查询商品列表失败
-
-#### 问题现象
-```typescript
-// 前端代码
-const res = await supa.select('ml_products', null, { limit: 20 })
-// res.success = false
-// res.error = "relation 'ml_products' does not exist"
-```
-
-#### 排查步骤
-1. **检查数据库表是否存在**
- ```sql
- SELECT table_name FROM information_schema.tables
- WHERE table_schema = 'public' AND table_name = 'ml_products';
- ```
-
-2. **检查表是否已创建**
- - 执行 `complete_mall_database.sql` 脚本
- - 验证脚本执行成功
-
-3. **检查连接配置**
- ```typescript
- console.log('Supabase URL:', SUPA_URL)
- console.log('Supabase Key:', SUPA_KEY)
- ```
-
-#### 解决方案
-```bash
-# 重新执行数据库脚本
-psql -h localhost -U postgres -d postgres -f doc_mall/database/complete_mall_database.sql
-```
-
-### 5.2 场景二: RLS 策略阻止数据访问
-
-#### 问题现象
-```typescript
-// 查询用户数据返回空
-const res = await supa.select('ml_user_profiles', { user_id: userId })
-// res.data = [] 或 null
-```
-
-#### 排查步骤
-1. **检查用户是否已登录**
- ```typescript
- const session = await supa.getSession()
- console.log('当前用户:', session.user)
- ```
-
-2. **检查 RLS 策略**
- ```sql
- -- 查看表的 RLS 策略
- SELECT * FROM pg_policies WHERE tablename = 'ml_user_profiles';
-
- -- 测试 RLS 策略
- SET ROLE authenticated;
- SET request.jwt.claim.sub = 'auth-user-id';
- SELECT * FROM ml_user_profiles;
- ```
-
-3. **检查 auth_id 关联**
- ```sql
- -- 验证 ak_users.auth_id 是否正确
- SELECT id, auth_id FROM ak_users WHERE id = 'user-uuid';
- ```
-
-#### 解决方案
-```typescript
-// 确保用户已登录
-await supa.signIn('user@example.com', 'password')
-
-// 或检查 Token
-const token = AkReq.getToken()
-console.log('JWT Token:', token)
-```
-
-### 5.3 场景三: 插入数据失败
-
-#### 问题现象
-```typescript
-// 插入订单失败
-const res = await supa.insert('ml_orders', orderData)
-// res.success = false
-// res.error = "new row violates row-level security policy"
-```
-
-#### 排查步骤
-1. **检查必填字段**
- ```typescript
- console.log('订单数据:', JSON.stringify(orderData, null, 2))
- ```
-
-2. **检查外键约束**
- ```sql
- -- 验证 user_id 和 merchant_id 是否存在
- SELECT id FROM ak_users WHERE id IN ('user-id', 'merchant-id');
- ```
-
-3. **检查 RLS INSERT 策略**
- ```sql
- SELECT * FROM pg_policies
- WHERE tablename = 'ml_orders' AND cmd = 'INSERT';
- ```
-
-#### 解决方案
-```typescript
-// 确保数据完整
-const orderData = {
- user_id: userId, // 必须存在
- merchant_id: merchantId, // 必须存在
- total_amount: 100.00,
- order_status: 1,
- payment_status: 1,
- shipping_status: 1,
- shipping_address: addressData // 必须提供
-}
-
-// 确保用户有权限
-await supa.signIn('user@example.com', 'password')
-```
-
-### 5.4 场景四: 实时数据同步不工作
-
-#### 问题现象
-```typescript
-// 订阅订单状态更新,但没有收到推送
-supa.realtime.subscribe('ml_orders', {
- filter: `id=eq.${orderId}`,
- event: 'UPDATE',
- callback: (payload) => {
- console.log('订单更新:', payload) // 没有触发
- }
-})
-```
-
-#### 排查步骤
-1. **检查 WebSocket 连接**
- ```typescript
- console.log('WebSocket URL:', WS_URL)
- ```
-
-2. **检查表是否启用 Realtime**
- ```sql
- -- 在 Supabase Dashboard 中检查
- -- Database -> Replication -> 确保 ml_orders 表已启用
- ```
-
-3. **检查网络连接**
- - 确保 WebSocket 连接没有被防火墙阻止
- - 检查浏览器控制台是否有 WebSocket 错误
-
-#### 解决方案
-```typescript
-// 确保 WebSocket URL 正确
-export const WS_URL: string = 'wss://your-project.supabase.co/realtime/v1/websocket'
-
-// 在 Supabase Dashboard 中启用表的 Realtime
-// Database -> Replication -> 找到 ml_orders -> 启用
-```
-
-### 5.5 场景五: 数据库函数调用失败
-
-#### 问题现象
-```typescript
-// 调用 RPC 函数失败
-const res = await supa.rpc('calculate_cart_total', { p_user_id: userId })
-// res.success = false
-// res.error = "function calculate_cart_total does not exist"
-```
-
-#### 排查步骤
-1. **检查函数是否存在**
- ```sql
- SELECT routine_name FROM information_schema.routines
- WHERE routine_schema = 'public' AND routine_name = 'calculate_cart_total';
- ```
-
-2. **检查函数参数**
- ```sql
- -- 查看函数定义
- \df calculate_cart_total
- ```
-
-3. **测试函数**
- ```sql
- SELECT calculate_cart_total('user-uuid-here');
- ```
-
-#### 解决方案
-```bash
-# 重新执行数据库脚本,确保函数已创建
-psql -h localhost -U postgres -d postgres -f doc_mall/database/complete_mall_database.sql
-```
-
----
-
-## 六、问题排查
-
-### 6.1 排查清单
-
-#### 连接问题
-- [ ] Supabase URL 是否正确
-- [ ] API Key 是否正确
-- [ ] 网络连接是否正常
-- [ ] 防火墙是否阻止连接
-
-#### 认证问题
-- [ ] 用户是否已登录
-- [ ] JWT Token 是否有效
-- [ ] Token 是否过期
-- [ ] auth_id 是否正确关联
-
-#### 数据问题
-- [ ] 表是否存在
-- [ ] 字段名是否正确
-- [ ] 数据类型是否匹配
-- [ ] 外键约束是否满足
-
-#### 权限问题
-- [ ] RLS 策略是否正确
-- [ ] 用户是否有权限
-- [ ] 策略条件是否满足
-
-### 6.2 常用调试命令
-
-#### 前端调试
-```typescript
-// 打印完整请求信息
-console.log('请求详情:', {
- url: `${SUPA_URL}/rest/v1/ml_products`,
- headers: {
- apikey: SUPA_KEY,
- Authorization: `Bearer ${token}`
- },
- filter: filter,
- options: options
-})
-
-// 打印完整响应
-console.log('响应详情:', {
- success: res.success,
- status: res.status,
- data: res.data,
- error: res.error,
- raw: res
-})
-```
-
-#### 数据库调试
-```sql
--- 查看表结构
-\d ml_products
-
--- 查看索引
-\di ml_products*
-
--- 查看触发器
-\d+ ml_products
-
--- 查看 RLS 策略
-SELECT * FROM pg_policies WHERE tablename = 'ml_products';
-
--- 测试查询性能
-EXPLAIN ANALYZE SELECT * FROM ml_products WHERE status = 1;
-```
-
-### 6.3 错误码参考
-
-| HTTP 状态码 | 含义 | 常见原因 |
-| ----------- | ---------- | ---------------------- |
-| 200 | 成功 | - |
-| 400 | 请求错误 | 参数错误、数据格式错误 |
-| 401 | 未授权 | Token 无效、未登录 |
-| 403 | 禁止访问 | RLS 策略阻止 |
-| 404 | 未找到 | 表不存在、记录不存在 |
-| 500 | 服务器错误 | 数据库错误、函数错误 |
-
-### 6.4 日志收集
-
-#### 前端日志
-```typescript
-// 创建日志工具
-class DebugLogger {
- static log(module: string, action: string, data: any) {
- console.log(`[${module}] ${action}:`, data)
- // 可以发送到日志服务器
- }
-}
-
-// 使用
-DebugLogger.log('MallAPI', '查询商品', { filter, options })
-```
-
-#### 后端日志
-```sql
--- 启用 PostgreSQL 日志
--- 在 postgresql.conf 中设置
-log_statement = 'all'
-log_duration = on
-log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
-```
-
----
-
-## 七、最佳实践
-
-### 7.1 开发环境配置
-
-1. **使用环境变量**
- ```typescript
- // 开发环境
- const isDev = process.env.NODE_ENV === 'development'
- export const SUPA_URL = isDev
- ? 'http://192.168.0.150:8080'
- : 'https://ak3.oulog.com'
- ```
-
-2. **统一错误处理**
- ```typescript
- async function safeApiCall(apiCall: () => Promise>) {
- try {
- const res = await apiCall()
- if (!res.success) {
- console.error('API 调用失败:', res.error)
- uni.showToast({ title: '操作失败', icon: 'error' })
- }
- return res
- } catch (error) {
- console.error('API 调用异常:', error)
- uni.showToast({ title: '网络错误', icon: 'error' })
- throw error
- }
- }
- ```
-
-3. **请求重试机制**
- ```typescript
- async function retryApiCall(
- apiCall: () => Promise>,
- maxRetries = 3
- ) {
- for (let i = 0; i < maxRetries; i++) {
- try {
- const res = await apiCall()
- if (res.success) return res
- } catch (error) {
- if (i === maxRetries - 1) throw error
- await new Promise(resolve => setTimeout(resolve, 1000 * (i + 1)))
- }
- }
- }
- ```
-
-### 7.2 联调流程
-
-1. **数据库准备**
- - 执行数据库脚本
- - 插入测试数据
- - 验证表结构
-
-2. **前端配置**
- - 配置 Supabase URL 和 Key
- - 测试连接
- - 验证认证
-
-3. **功能测试**
- - 测试 CRUD 操作
- - 测试 RLS 策略
- - 测试实时同步
-
-4. **问题排查**
- - 查看日志
- - 检查网络请求
- - 验证数据库数据
-
----
-
-## 📚 相关文档
-
-- [模块分析报告](./MODULE_ANALYSIS.md)
-- [数据库创建报告](./database/database_creation_report.md)
-- [完整部署指南](./database/complete_deployment_guide.md)
-- [Supabase 官方文档](https://supabase.com/docs)
-
----
-
-**生成时间**: 2025年1月
-**版本**: v1.0
-**状态**: ✅ 完整联调指南
diff --git a/mall/doc_mall/MIGRATION_CHECKLIST.md b/mall/doc_mall/MIGRATION_CHECKLIST.md
deleted file mode 100644
index a3fa6a22..00000000
--- a/mall/doc_mall/MIGRATION_CHECKLIST.md
+++ /dev/null
@@ -1,254 +0,0 @@
-# ✅ doc_mall 项目迁移检查清单
-
-## 📋 文件迁移清单
-
-### 1. 文档和数据库脚本 (`doc_mall/`)
-
-#### 核心文档
-- [ ] `README.md` - 文档索引
-- [ ] `TECHNICAL_IMPLEMENTATION.md` - 技术实现拆解
-- [ ] `MODULE_ANALYSIS.md` - 模块深度分析
-- [ ] `FRONTEND_BACKEND_DEBUGGING.md` - 前后端联调指南
-- [ ] `user_reuse_summary.md` - 用户表复用方案
-- [ ] `migration_complete_report.md` - 迁移完成报告
-- [ ] `README_subscription_consumer.md` - 订阅功能说明
-- [ ] `裂变红包.md` - 红包功能文档
-- [ ] `MIGRATION_GUIDE.md` - 迁移指南(本文档)
-- [ ] `MIGRATION_CHECKLIST.md` - 迁移清单(本文件)
-
-#### SQL 脚本
-- [ ] `create_mall_subscription_tables.sql` - 订阅表创建脚本
-- [ ] `subscription_guard_trigger.sql` - 订阅触发器
-- [ ] `subscription_rls_policies.sql` - 订阅RLS策略
-
-#### 分析文档目录 (`analysis/`)
-- [ ] `analysis/user_compatibility_analysis.md` - 用户兼容性分析
-
-#### 数据库目录 (`database/`)
-- [ ] `database/complete_mall_database.sql` - 完整数据库(推荐)
-- [ ] `database/database_creation_report.md` - 数据库创建报告
-- [ ] `database/database_syntax_fix_report.md` - 语法修正报告
-- [ ] `database/type_error_fix_report.md` - 类型错误修正报告
-- [ ] `database/seo_optimization_report.md` - SEO优化报告
-- [ ] `database/seo_optimization_guide.md` - SEO优化指南
-- [ ] `database/user_compatibility_implementation.sql` - 用户兼容性实施脚本
-- [ ] `database/product_database.sql` - 商品数据库设计
-- [ ] `database/mock_data_insert.sql` - 模拟数据插入脚本
-- [ ] `database/mock_data_documentation.md` - 模拟数据说明
-- [ ] `database/deployment_guide.md` - 快速部署指南
-- [ ] `database/validation_test.sql` - 数据库验证测试脚本
-- [ ] `database/complete_deployment_guide.md` - 完整部署与测试指南
-- [ ] `database/database_creation_report.md` - 数据库创建报告
-- [ ] `database/[其他SQL文件]` - 其他数据库脚本
-
-#### 报告目录 (`reports/`)
-- [ ] `reports/system_generation_report.md` - 系统生成报告
-- [ ] `reports/detail_pages_report.md` - 详情页生成报告
-- [ ] `reports/profile_pages_report.md` - 个人中心页面报告
-
----
-
-### 2. 前端页面代码 (`pages/mall/`)
-
-#### 管理端页面 (`admin/`)
-- [ ] `admin/index.uvue` - 管理端首页
-- [ ] `admin/profile.uvue` - 管理端个人中心
-- [ ] `admin/user-detail.uvue` - 用户详情
-- [ ] `admin/subscription/plan-management.uvue` - 订阅方案管理
-- [ ] `admin/subscription/user-subscriptions.uvue` - 用户订阅管理
-
-#### 数据分析端页面 (`analytics/`)
-- [ ] `analytics/index.uvue` - 数据分析首页
-- [ ] `analytics/profile.uvue` - 数据分析个人中心
-- [ ] `analytics/report-detail.uvue` - 报表详情
-
-#### 消费者端页面 (`consumer/`)
-- [ ] `consumer/index.uvue` - 消费者首页
-- [ ] `consumer/product-detail.uvue` - 商品详情
-- [ ] `consumer/order-detail.uvue` - 订单详情
-- [ ] `consumer/profile.uvue` - 消费者个人中心
-- [ ] `consumer/subscription/plan-list.uvue` - 订阅方案列表
-- [ ] `consumer/subscription/plan-detail.uvue` - 订阅方案详情
-- [ ] `consumer/subscription/subscribe-checkout.uvue` - 订阅确认
-- [ ] `consumer/subscription/my-subscriptions.uvue` - 我的订阅
-- [ ] `consumer/subscription/README.md` - 订阅功能说明
-
-#### 配送端页面 (`delivery/`)
-- [ ] `delivery/index.uvue` - 配送端首页
-- [ ] `delivery/order-detail.uvue` - 配送订单详情
-- [ ] `delivery/profile.uvue` - 配送员个人中心
-
-#### 商家端页面 (`merchant/`)
-- [ ] `merchant/index.uvue` - 商家端首页
-- [ ] `merchant/product-detail.uvue` - 商品管理详情
-- [ ] `merchant/profile.uvue` - 商家个人中心
-
-#### 客服端页面 (`service/`)
-- [ ] `service/index.uvue` - 客服工作台首页
-- [ ] `service/profile.uvue` - 客服个人中心
-- [ ] `service/ticket-detail.uvue` - 工单详情
-
-#### NFC 功能页面 (`nfc/`) - 可选
-- [ ] `nfc/admin/index.uvue`
-- [ ] `nfc/librarian/index.uvue`
-- [ ] `nfc/merchant/pos-cashier.uvue`
-- [ ] `nfc/parent/index.uvue`
-- [ ] `nfc/security/index.uvue`
-- [ ] `nfc/student/index.uvue`
-- [ ] `nfc/student/nfc-pay.uvue`
-- [ ] `nfc/teacher/index.uvue`
-
-#### 配置文件
-- [ ] `mall.md` - 业务需求文档
-- [ ] `nfc.md` - NFC功能文档
-- [ ] `nfc-modules-guide.md` - NFC模块指南
-- [ ] `pages-config.json` - 主要页面路由配置
-- [ ] `pages-admin.json` - 管理端路由配置
-- [ ] `pages-librarian.json` - 图书管理员路由配置
-- [ ] `pages-merchant.json` - 商家路由配置
-- [ ] `pages-parent.json` - 家长路由配置
-- [ ] `pages-security.json` - 安全员路由配置
-- [ ] `pages-student.json` - 学生路由配置
-- [ ] `pages-teacher.json` - 教师路由配置
-
----
-
-### 3. 类型定义文件
-
-- [ ] `types/mall-types.uts` - 商城系统完整类型定义(**必须迁移**)
-
----
-
-### 4. 依赖文件(可选,根据实际情况)
-
-#### Supabase 客户端封装
-- [ ] `components/supadb/aksupainstance.uts` - Supabase实例
-- [ ] `components/supadb/aksupa.uts` - Supabase客户端封装
-- [ ] `components/supadb/aksuparealtime.uts` - 实时订阅封装
-- [ ] `components/supadb/[其他相关文件]` - 其他Supabase相关文件
-
-#### 工具函数(根据实际引用)
-- [ ] 检查 `pages/mall/` 中所有 `@/utils/` 的引用
-- [ ] 迁移需要的工具函数文件
-
----
-
-## 🔗 依赖关系检查
-
-### 数据库依赖
-- [ ] 确定用户表处理方案(独立表/复用表/API服务)
-- [ ] 更新相关外键引用(如需要)
-- [ ] 配置 Supabase 项目连接信息
-
-### 代码依赖
-- [ ] 检查所有 `@/types/mall-types.uts` 引用(应已迁移)
-- [ ] 检查所有 `@/components/supadb` 引用
-- [ ] 检查所有 `@/utils/` 引用
-- [ ] 更新导入路径(如需要)
-
-### 配置文件依赖
-- [ ] Supabase 项目 URL 和 API Key
-- [ ] 环境变量配置
-- [ ] 路由配置(pages-config.json 等)
-
----
-
-## 🗄️ 数据库迁移步骤
-
-### 环境准备
-- [ ] 创建新的 Supabase 项目(或确定使用现有项目)
-- [ ] 获取 Supabase 项目 URL 和 API Key
-- [ ] 准备 PostgreSQL 客户端工具(如需要)
-
-### 数据库脚本执行
-- [ ] 执行 `database/complete_mall_database.sql` - 创建完整数据库结构
-- [ ] 执行 `subscription_rls_policies.sql` - 订阅RLS策略
-- [ ] 执行 `subscription_guard_trigger.sql` - 订阅触发器
-- [ ] 执行 `database/mock_data_insert.sql` - 插入测试数据(可选)
-- [ ] 执行 `database/validation_test.sql` - 验证数据库状态
-
-### 数据库验证
-- [ ] 验证所有表已创建
-- [ ] 验证 RLS 策略已生效
-- [ ] 验证触发器已创建
-- [ ] 验证索引已创建
-- [ ] 测试数据查询功能
-
----
-
-## 🔧 代码适配检查
-
-### 路径更新
-- [ ] 检查所有文件中的 `@/types/mall-types` 导入路径
-- [ ] 检查所有文件中的 `@/components/supadb` 导入路径
-- [ ] 检查所有文件中的 `@/utils/` 导入路径
-- [ ] 更新为正确的相对路径或配置别名
-
-### 配置更新
-- [ ] 更新 Supabase 客户端初始化配置
-- [ ] 更新环境变量配置
-- [ ] 更新路由配置文件(如需要)
-
-### 文档更新
-- [ ] 更新文档中的路径引用
-- [ ] 更新文档中的配置说明
-
----
-
-## 🧪 测试验证
-
-### 编译测试
-- [ ] 项目可以正常编译
-- [ ] 无类型错误
-- [ ] 无导入路径错误
-
-### 运行时测试
-- [ ] 应用可以正常启动
-- [ ] Supabase 连接正常
-- [ ] 页面可以正常加载
-
-### 功能测试
-- [ ] 用户认证功能正常
-- [ ] 商品浏览功能正常
-- [ ] 订单创建功能正常
-- [ ] 权限控制正常(RLS)
-
-### 数据库测试
-- [ ] CRUD 操作正常
-- [ ] RLS 策略生效
-- [ ] 触发器正常工作
-
----
-
-## 📝 迁移记录
-
-### 迁移信息
-- **迁移日期**: ___________
-- **源项目路径**: ___________
-- **目标项目路径**: ___________
-- **迁移人员**: ___________
-
-### 迁移问题记录
-| 问题描述 | 解决方案 | 状态 |
-| -------- | -------- | ---- |
-| | | |
-| | | |
-
-### 待处理事项
-- [ ]
-- [ ]
-- [ ]
-
----
-
-## ✅ 迁移完成确认
-
-- [ ] 所有文件已迁移
-- [ ] 所有依赖已处理
-- [ ] 数据库已配置
-- [ ] 代码已适配
-- [ ] 测试已通过
-- [ ] 文档已更新
-
-**迁移完成签名**: ___________
-**完成日期**: ___________
diff --git a/mall/doc_mall/MIGRATION_GUIDE.md b/mall/doc_mall/MIGRATION_GUIDE.md
deleted file mode 100644
index 30a77be6..00000000
--- a/mall/doc_mall/MIGRATION_GUIDE.md
+++ /dev/null
@@ -1,542 +0,0 @@
-# 🚀 doc_mall 项目迁移指南
-
-## 📋 迁移概述
-
-本指南将帮助你将 `doc_mall` 商城系统模块从当前项目迁移到一个独立的仓库中,确保所有相关模块和依赖项都能正确复用。
-
----
-
-## 📁 需要迁移的文件和目录清单
-
-### 1. 核心文档和数据库脚本 (`doc_mall/`)
-
-**完整目录结构**:
-```
-doc_mall/
-├── README.md # 文档索引
-├── TECHNICAL_IMPLEMENTATION.md # 技术实现拆解
-├── MODULE_ANALYSIS.md # 模块深度分析
-├── FRONTEND_BACKEND_DEBUGGING.md # 前后端联调指南
-├── user_reuse_summary.md # 用户表复用方案
-├── migration_complete_report.md # 迁移完成报告
-├── README_subscription_consumer.md # 订阅功能说明
-├── 裂变红包.md # 红包功能文档
-├── create_mall_subscription_tables.sql # 订阅表创建脚本
-├── subscription_guard_trigger.sql # 订阅触发器
-├── subscription_rls_policies.sql # 订阅RLS策略
-├── analysis/ # 分析文档目录
-│ └── user_compatibility_analysis.md
-├── database/ # 数据库脚本目录
-│ ├── complete_mall_database.sql # 完整数据库(推荐)
-│ ├── database_creation_report.md
-│ ├── database_syntax_fix_report.md
-│ ├── user_compatibility_implementation.sql
-│ ├── product_database.sql
-│ ├── mock_data_insert.sql
-│ ├── mock_data_documentation.md
-│ ├── deployment_guide.md
-│ ├── validation_test.sql
-│ ├── complete_deployment_guide.md
-│ └── [其他SQL和文档文件]
-└── reports/ # 生成报告目录
- ├── system_generation_report.md
- ├── detail_pages_report.md
- └── profile_pages_report.md
-```
-
-**迁移操作**:
-```bash
-# 直接复制整个 doc_mall 目录
-cp -r doc_mall/ /path/to/new-repo/doc_mall/
-```
-
----
-
-### 2. 前端页面代码 (`pages/mall/`)
-
-**完整目录结构**:
-```
-pages/mall/
-├── admin/ # 管理端页面
-│ ├── index.uvue
-│ ├── profile.uvue
-│ ├── user-detail.uvue
-│ └── subscription/
-│ ├── plan-management.uvue
-│ └── user-subscriptions.uvue
-├── analytics/ # 数据分析端页面
-│ ├── index.uvue
-│ ├── profile.uvue
-│ └── report-detail.uvue
-├── consumer/ # 消费者端页面
-│ ├── index.uvue
-│ ├── product-detail.uvue
-│ ├── order-detail.uvue
-│ ├── profile.uvue
-│ └── subscription/
-│ ├── plan-list.uvue
-│ ├── plan-detail.uvue
-│ ├── subscribe-checkout.uvue
-│ ├── my-subscriptions.uvue
-│ └── README.md
-├── delivery/ # 配送端页面
-│ ├── index.uvue
-│ ├── order-detail.uvue
-│ └── profile.uvue
-├── merchant/ # 商家端页面
-│ ├── index.uvue
-│ ├── product-detail.uvue
-│ └── profile.uvue
-├── service/ # 客服端页面
-│ ├── index.uvue
-│ ├── profile.uvue
-│ └── ticket-detail.uvue
-├── nfc/ # NFC支付相关(可选)
-│ ├── admin/index.uvue
-│ ├── librarian/index.uvue
-│ ├── merchant/pos-cashier.uvue
-│ ├── parent/index.uvue
-│ ├── security/index.uvue
-│ ├── student/index.uvue
-│ ├── teacher/index.uvue
-│ └── [其他NFC相关文件]
-├── mall.md # 业务需求文档
-├── nfc.md # NFC功能文档
-├── nfc-modules-guide.md # NFC模块指南
-├── pages-config.json # 页面路由配置(主要)
-├── pages-admin.json # 管理端路由配置
-├── pages-librarian.json # 图书管理员路由配置
-├── pages-merchant.json # 商家路由配置
-├── pages-parent.json # 家长路由配置
-├── pages-security.json # 安全员路由配置
-├── pages-student.json # 学生路由配置
-└── pages-teacher.json # 教师路由配置
-```
-
-**迁移操作**:
-```bash
-# 复制整个 pages/mall 目录
-cp -r pages/mall/ /path/to/new-repo/pages/mall/
-```
-
----
-
-### 3. 类型定义文件 (`types/mall-types.uts`)
-
-**文件路径**:
-```
-types/mall-types.uts
-```
-
-**说明**:
-- 包含所有商城系统相关的 TypeScript/UTS 类型定义
-- 所有 `pages/mall/` 下的页面都依赖此文件
-- 必须迁移,否则前端代码无法编译
-
-**迁移操作**:
-```bash
-# 复制类型定义文件
-mkdir -p /path/to/new-repo/types
-cp types/mall-types.uts /path/to/new-repo/types/
-```
-
----
-
-## 🔗 依赖关系分析
-
-### 3.1 内部依赖(必须迁移)
-
-#### Supabase 客户端封装
-- **依赖文件**:`components/supadb/aksupainstance.uts`
-- **使用情况**:所有商城页面都通过 Supabase 客户端访问数据库
-- **迁移建议**:
- - 如果新仓库也需要使用 Supabase,需要迁移此文件
- - 或者创建新的 Supabase 客户端封装
-
-#### 工具函数
-- **检查项目**:是否需要 `utils/` 下的工具函数
-- **常见使用**:日期格式化、数据验证等
-- **迁移建议**:
- - 检查商城页面中 `@/utils/` 的引用
- - 根据需要迁移相应的工具函数
-
-### 3.2 外部依赖(需要配置)
-
-#### 数据库依赖
-- **依赖表**:`ak_users` (用户主表)
-- **说明**:商城系统复用现有用户表实现单点登录
-- **迁移策略**:
- - **方案A**:在新仓库中创建独立的用户表
- - **方案B**:保持与现有用户表的关联(需要跨数据库访问)
- - **方案C**:通过 API 服务访问用户数据
-
-#### Supabase 配置
-- **需要配置**:Supabase 项目 URL 和 API Key
-- **配置文件**:通常保存在环境变量或配置文件中
-- **迁移步骤**:
- 1. 在新仓库创建 Supabase 项目(或使用现有项目)
- 2. 执行数据库脚本创建表结构
- 3. 配置 RLS 策略和权限
- 4. 更新前端配置中的 Supabase 连接信息
-
----
-
-## 📝 迁移步骤详解
-
-### 步骤 1: 创建新仓库
-
-```bash
-# 1. 创建新仓库目录
-mkdir mall-system
-cd mall-system
-
-# 2. 初始化 Git 仓库
-git init
-
-# 3. 创建基础目录结构
-mkdir -p doc_mall/{analysis,database,reports}
-mkdir -p pages/mall
-mkdir -p types
-mkdir -p components/supadb # 如果需要
-mkdir -p utils # 如果需要
-```
-
-### 步骤 2: 迁移文档和数据库脚本
-
-```bash
-# 从原项目复制 doc_mall 目录
-cp -r /path/to/akmon/doc_mall/* ./doc_mall/
-
-# 验证文件完整性
-ls -la doc_mall/
-```
-
-### 步骤 3: 迁移前端代码
-
-```bash
-# 复制页面代码
-cp -r /path/to/akmon/pages/mall/* ./pages/mall/
-
-# 复制类型定义
-cp /path/to/akmon/types/mall-types.uts ./types/
-
-# 验证关键文件
-ls -la pages/mall/
-ls -la types/mall-types.uts
-```
-
-### 步骤 4: 迁移依赖文件(可选)
-
-```bash
-# 如果需要 Supabase 客户端
-cp -r /path/to/akmon/components/supadb/* ./components/supadb/
-
-# 检查并迁移需要的工具函数
-# 查看 pages/mall/ 下文件中的 import 语句
-grep -r "from '@/utils" pages/mall/
-```
-
-### 步骤 5: 更新导入路径
-
-在新仓库中,需要检查并更新以下内容:
-
-#### 5.1 检查类型导入
-```bash
-# 查找所有 mall-types 的引用
-grep -r "from '@/types/mall-types" pages/mall/
-```
-
-确保导入路径正确:
-```typescript
-// 应该是相对路径或配置的别名
-import type { ProductType } from '@/types/mall-types.uts'
-```
-
-#### 5.2 检查 Supabase 导入
-```bash
-# 查找 Supabase 引用
-grep -r "from '@/components/supadb" pages/mall/
-```
-
-#### 5.3 检查工具函数导入
-```bash
-# 查找工具函数引用
-grep -r "from '@/utils" pages/mall/
-```
-
-### 步骤 6: 配置数据库
-
-#### 6.1 创建 Supabase 项目
-1. 访问 Supabase 控制台
-2. 创建新项目或使用现有项目
-3. 记录项目 URL 和 API Key
-
-#### 6.2 执行数据库脚本
-```bash
-# 方式1: 通过 Supabase Dashboard SQL Editor
-# 打开 doc_mall/database/complete_mall_database.sql
-# 复制内容到 Supabase SQL Editor 执行
-
-# 方式2: 通过 psql 命令行(如果使用自建 PostgreSQL)
-psql -h localhost -U postgres -d your_database -f doc_mall/database/complete_mall_database.sql
-```
-
-#### 6.3 配置 RLS 策略
-确保执行以下脚本:
-- `doc_mall/subscription_rls_policies.sql`
-- `doc_mall/subscription_guard_trigger.sql`
-- 数据库脚本中已包含的 RLS 策略
-
-#### 6.4 插入测试数据(可选)
-```bash
-psql -h localhost -U postgres -d your_database -f doc_mall/database/mock_data_insert.sql
-```
-
-### 步骤 7: 配置前端环境
-
-#### 7.1 创建配置文件
-在新仓库根目录创建配置文件(根据你的项目结构):
-
-**示例:`config/supabase.config.ts`**
-```typescript
-export const supabaseConfig = {
- url: 'https://your-project.supabase.co',
- anonKey: 'your-anon-key',
- // 其他配置
-}
-```
-
-#### 7.2 更新 Supabase 客户端初始化
-如果迁移了 `components/supadb/aksupainstance.uts`,确保它使用新的配置。
-
-#### 7.3 配置路由
-检查并更新以下路由配置文件:
-- `pages/mall/pages-config.json` (主要路由配置)
-- 其他角色端路由配置 JSON 文件
-
-### 步骤 8: 处理用户表依赖
-
-商城系统依赖 `ak_users` 表,有几种处理方案:
-
-#### 方案 A: 创建独立的用户表(推荐用于完全独立部署)
-```sql
--- 创建独立的用户表(简化版)
-CREATE TABLE public.mall_users (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- phone VARCHAR(20) UNIQUE NOT NULL,
- email VARCHAR(255),
- nickname VARCHAR(100),
- -- 其他必要字段
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-);
-```
-
-然后更新所有 `ml_user_profiles` 等表的外键引用:
-```sql
--- 修改外键引用
-ALTER TABLE public.ml_user_profiles
-DROP CONSTRAINT ml_user_profiles_user_id_fkey;
-
-ALTER TABLE public.ml_user_profiles
-ADD CONSTRAINT ml_user_profiles_user_id_fkey
-FOREIGN KEY (user_id) REFERENCES public.mall_users(id) ON DELETE CASCADE;
-```
-
-#### 方案 B: 通过 API 服务访问用户数据
-- 保持数据库结构不变
-- 通过 API 服务层访问用户数据
-- 前端不直接访问 `ak_users` 表
-
-#### 方案 C: 跨数据库访问(复杂,不推荐)
-- 保持现有的数据库引用
-- 配置跨数据库访问权限
-
-### 步骤 9: 测试和验证
-
-#### 9.1 编译测试
-```bash
-# 尝试编译项目(根据你的构建工具)
-npm run build
-# 或
-uni-app-x build
-```
-
-#### 9.2 数据库连接测试
-- 测试 Supabase 连接
-- 验证 RLS 策略是否生效
-- 测试 CRUD 操作
-
-#### 9.3 功能测试
-- 测试各个角色端页面是否能正常加载
-- 测试核心业务流程(商品浏览、下单等)
-- 测试权限控制
-
----
-
-## 🔧 迁移后需要修改的内容
-
-### 1. 更新导入路径
-
-检查并更新所有文件中的导入路径,确保它们指向正确的位置:
-
-```typescript
-// 原项目中的导入
-import type { ProductType } from '@/types/mall-types.uts'
-import { supabase } from '@/components/supadb/aksupainstance.uts'
-
-// 新仓库中可能需要调整为
-import type { ProductType } from '@/types/mall-types.uts'
-import { supabase } from '@/lib/supabase/client.uts' // 如果路径改变了
-```
-
-### 2. 更新数据库表引用
-
-如果用户表方案改变,需要更新所有相关的外键和查询:
-
-```sql
--- 原项目中引用 ak_users
-user_id UUID NOT NULL REFERENCES public.ak_users(id)
-
--- 如果改为独立用户表
-user_id UUID NOT NULL REFERENCES public.mall_users(id)
-```
-
-### 3. 更新环境变量和配置
-
-- Supabase 项目 URL 和 API Key
-- 数据库连接字符串
-- 其他环境相关配置
-
-### 4. 更新文档中的路径引用
-
-检查 `doc_mall/` 下的文档,更新其中的文件路径引用:
-
-```markdown
-# 原文档中的路径
-- `../types/mall-types.uts`
-
-# 新仓库中应该为
-- `types/mall-types.uts`
-```
-
----
-
-## ✅ 迁移检查清单
-
-使用以下清单确保迁移完整:
-
-- [ ] **文档迁移**
- - [ ] `doc_mall/` 目录完整复制
- - [ ] 所有子目录(analysis, database, reports)已迁移
- - [ ] 文档中的路径引用已更新
-
-- [ ] **前端代码迁移**
- - [ ] `pages/mall/` 所有页面文件已迁移
- - [ ] `types/mall-types.uts` 已迁移
- - [ ] 所有路由配置文件(pages-*.json)已迁移
- - [ ] 业务需求文档(mall.md)已迁移
-
-- [ ] **依赖文件迁移**
- - [ ] Supabase 客户端封装已迁移或重新创建
- - [ ] 必要的工具函数已迁移
- - [ ] 组件依赖已处理
-
-- [ ] **数据库配置**
- - [ ] Supabase 项目已创建并配置
- - [ ] 数据库脚本已执行
- - [ ] RLS 策略已配置
- - [ ] 测试数据已插入(可选)
- - [ ] 用户表依赖已处理
-
-- [ ] **代码适配**
- - [ ] 所有导入路径已更新
- - [ ] 数据库表引用已更新(如需要)
- - [ ] 配置文件已更新
- - [ ] 环境变量已配置
-
-- [ ] **测试验证**
- - [ ] 项目可以正常编译
- - [ ] 数据库连接正常
- - [ ] 页面可以正常加载
- - [ ] 核心功能测试通过
-
----
-
-## 🚨 常见问题和解决方案
-
-### 问题 1: 编译错误 - 找不到类型定义
-
-**错误信息**:
-```
-Cannot find module '@/types/mall-types.uts'
-```
-
-**解决方案**:
-1. 确认 `types/mall-types.uts` 文件已迁移
-2. 检查 TypeScript/UTS 配置中的路径别名设置
-3. 确保 `@/types` 正确映射到 `types/` 目录
-
-### 问题 2: Supabase 连接失败
-
-**错误信息**:
-```
-Failed to connect to Supabase
-```
-
-**解决方案**:
-1. 检查 Supabase 项目 URL 和 API Key 配置
-2. 验证网络连接
-3. 检查 Supabase 项目的状态
-
-### 问题 3: RLS 策略导致权限错误
-
-**错误信息**:
-```
-new row violates row-level security policy
-```
-
-**解决方案**:
-1. 确认已执行所有 RLS 策略脚本
-2. 检查用户认证状态
-3. 验证 RLS 策略的 SELECT/INSERT/UPDATE 权限设置
-
-### 问题 4: 外键约束错误
-
-**错误信息**:
-```
-foreign key constraint "ml_user_profiles_user_id_fkey" fails
-```
-
-**解决方案**:
-1. 如果使用独立用户表,需要更新外键引用
-2. 确保引用的用户记录存在
-3. 检查外键约束的 CASCADE 设置
-
----
-
-## 📚 参考资料
-
-- [Supabase 官方文档](https://supabase.com/docs)
-- [uni-app-x 官方文档](https://uniapp.dcloud.net.cn/uni-app-x/)
-- [PostgreSQL 官方文档](https://www.postgresql.org/docs/)
-- 项目内部文档:
- - `doc_mall/TECHNICAL_IMPLEMENTATION.md` - 技术实现详情
- - `doc_mall/FRONTEND_BACKEND_DEBUGGING.md` - 调试指南
- - `doc_mall/database/complete_deployment_guide.md` - 数据库部署指南
-
----
-
-## 📞 迁移支持
-
-如果在迁移过程中遇到问题:
-
-1. **查看文档**:先查看 `doc_mall/` 下的相关文档
-2. **检查日志**:查看编译日志和运行时日志
-3. **数据库验证**:使用 `doc_mall/database/validation_test.sql` 验证数据库状态
-4. **联系开发团队**:提供详细的错误信息和迁移步骤
-
----
-
-**最后更新**: 2025年1月
-**版本**: v1.0
-**状态**: ✅ 完整迁移指南
diff --git a/mall/doc_mall/MIGRATION_SUMMARY.md b/mall/doc_mall/MIGRATION_SUMMARY.md
deleted file mode 100644
index 175941ff..00000000
--- a/mall/doc_mall/MIGRATION_SUMMARY.md
+++ /dev/null
@@ -1,180 +0,0 @@
-# 📦 doc_mall 迁移工作总览
-
-## ✅ 已完成的准备工作
-
-### 📄 迁移文档
-- ✅ **MIGRATION_GUIDE.md** - 完整的迁移指南(543行)
-- ✅ **MIGRATION_CHECKLIST.md** - 详细的迁移检查清单(255行)
-- ✅ **QUICK_START_MIGRATION.md** - 快速开始指南
-- ✅ **MIGRATION_SUMMARY.md** - 本文件,迁移工作总览
-
-### 🔧 迁移工具
-- ✅ **migrate.ps1** - Windows PowerShell 迁移脚本(191行)
-- ✅ **migrate.sh** - Linux/Mac Bash 迁移脚本(179行)
-
-### 📊 迁移统计
-
-#### 文档和数据库脚本 (`doc_mall/`)
-- **文件数量**: 约 48 个文件
-- **主要目录**:
- - `analysis/` - 分析文档
- - `database/` - 数据库脚本(15+ SQL文件,12+ MD文档)
- - `reports/` - 生成报告
-
-#### 前端页面代码 (`pages/mall/`)
-- **文件数量**: 约 45 个文件
-- **主要目录**:
- - `admin/` - 管理端页面(5个文件)
- - `analytics/` - 数据分析端(3个文件)
- - `consumer/` - 消费者端(9个文件,含订阅功能)
- - `delivery/` - 配送端(3个文件)
- - `merchant/` - 商家端(3个文件)
- - `service/` - 客服端(3个文件)
- - `nfc/` - NFC支付相关(8个文件,可选)
-
-#### 类型定义文件
-- ✅ `types/mall-types.uts` - 商城系统完整类型定义(必须)
-
----
-
-## 🚀 执行迁移
-
-### 方式 1: 使用自动化脚本(推荐)
-
-#### Windows 系统
-```powershell
-# 1. 切换到项目目录
-cd D:\datas\hfkj\akmon
-
-# 2. 预览迁移(推荐先执行)
-.\doc_mall\migrate.ps1 -TargetPath "D:\path\to\new-repo" -DryRun
-
-# 3. 执行实际迁移
-.\doc_mall\migrate.ps1 -TargetPath "D:\path\to\new-repo"
-
-# 4. 如果需要包含 Supabase 组件
-.\doc_mall\migrate.ps1 -TargetPath "D:\path\to\new-repo" -CopySupabaseComponents
-
-# 5. 如果需要包含工具函数
-.\doc_mall\migrate.ps1 -TargetPath "D:\path\to\new-repo" -CopyUtils
-```
-
-#### Linux/Mac 系统
-```bash
-# 1. 切换到项目目录
-cd /path/to/akmon
-
-# 2. 添加执行权限
-chmod +x doc_mall/migrate.sh
-
-# 3. 预览迁移
-./doc_mall/migrate.sh /path/to/new-repo --dry-run
-
-# 4. 执行实际迁移
-./doc_mall/migrate.sh /path/to/new-repo
-
-# 5. 包含可选组件
-./doc_mall/migrate.sh /path/to/new-repo --copy-supabase --copy-utils
-```
-
-### 方式 2: 手动迁移
-
-如果不想使用脚本,可以手动执行以下步骤:
-
-```powershell
-# 1. 创建目标目录结构
-New-Item -ItemType Directory -Path "D:\path\to\new-repo\doc_mall\analysis" -Force
-New-Item -ItemType Directory -Path "D:\path\to\new-repo\doc_mall\database" -Force
-New-Item -ItemType Directory -Path "D:\path\to\new-repo\doc_mall\reports" -Force
-New-Item -ItemType Directory -Path "D:\path\to\new-repo\pages\mall" -Force
-New-Item -ItemType Directory -Path "D:\path\to\new-repo\types" -Force
-
-# 2. 复制文件
-Copy-Item -Path "doc_mall\*" -Destination "D:\path\to\new-repo\doc_mall\" -Recurse -Force
-Copy-Item -Path "pages\mall\*" -Destination "D:\path\to\new-repo\pages\mall\" -Recurse -Force
-Copy-Item -Path "types\mall-types.uts" -Destination "D:\path\to\new-repo\types\mall-types.uts" -Force
-```
-
----
-
-## 📋 迁移后必做事项
-
-### 1. 验证文件完整性
-
-使用检查清单验证所有文件已迁移:
-- 打开 `MIGRATION_CHECKLIST.md`
-- 逐项检查文件是否存在
-- 确认文件数量和大小
-
-### 2. 配置 Supabase
-
-```typescript
-// 创建 config/supabase.config.ts
-export const supabaseConfig = {
- url: 'https://your-project.supabase.co',
- anonKey: 'your-anon-key',
-}
-```
-
-### 3. 执行数据库脚本
-
-按照 `database/complete_deployment_guide.md` 执行:
-1. 执行 `complete_mall_database.sql` - 创建数据库结构
-2. 执行 `subscription_rls_policies.sql` - RLS策略
-3. 执行 `subscription_guard_trigger.sql` - 触发器
-4. 执行 `validation_test.sql` - 验证数据库
-
-### 4. 更新代码路径
-
-检查并更新以下导入路径:
-- `@/types/mall-types.uts`
-- `@/components/supadb/*`
-- `@/utils/*`(如需要)
-
-### 5. 测试验证
-
-- [ ] 项目可以编译
-- [ ] 页面可以加载
-- [ ] 数据库连接正常
-- [ ] 核心功能测试通过
-
----
-
-## 📚 文档结构
-
-```
-doc_mall/
-├── MIGRATION_GUIDE.md # 详细迁移指南 ⭐
-├── MIGRATION_CHECKLIST.md # 迁移检查清单 ⭐
-├── QUICK_START_MIGRATION.md # 快速开始 ⭐
-├── MIGRATION_SUMMARY.md # 本文档
-├── migrate.ps1 # PowerShell 脚本 ⭐
-├── migrate.sh # Bash 脚本 ⭐
-└── [其他原有文档和脚本]
-```
-
----
-
-## 🎯 下一步
-
-1. **确定目标路径**:决定新仓库的位置
-2. **执行预览**:使用 `-DryRun` 参数预览迁移
-3. **执行迁移**:运行迁移脚本
-4. **验证文件**:使用检查清单验证
-5. **配置环境**:设置 Supabase 和数据库
-6. **测试验证**:确保一切正常工作
-
----
-
-## 💡 提示
-
-- **预览模式**:强烈建议先使用 `-DryRun` 预览,确认无误后再执行
-- **备份重要数据**:迁移前备份重要文件
-- **分批迁移**:如果文件很多,可以分批测试迁移
-- **记录问题**:在 `MIGRATION_CHECKLIST.md` 中记录遇到的问题
-
----
-
-**创建时间**: 2025年1月
-**版本**: v1.0
-**状态**: ✅ 迁移工具已准备就绪,可以开始迁移
diff --git a/mall/doc_mall/MODULE_ANALYSIS.md b/mall/doc_mall/MODULE_ANALYSIS.md
deleted file mode 100644
index 92d01596..00000000
--- a/mall/doc_mall/MODULE_ANALYSIS.md
+++ /dev/null
@@ -1,710 +0,0 @@
-# 📊 doc_mall 模块深度分析报告
-
-## 📋 目录
-1. [模块概述](#模块概述)
-2. [数据库存储方式](#数据库存储方式)
-3. [数据库交互方式](#数据库交互方式)
-4. [开发模式](#开发模式)
-5. [开发流程](#开发流程)
-6. [技术架构总结](#技术架构总结)
-
----
-
-## 一、模块概述
-
-### 1.1 模块定位
-`doc_mall` 是一个**电商商城系统模块**,属于"梅州市智慧医养数字赋能平台"中的医养商城子系统。该模块提供医疗用品、保健产品、医养结合服务的在线销售平台。
-
-### 1.2 核心功能
-- 🛒 **商品管理**: 商品展示、分类、品牌、多规格SKU
-- 🏪 **店铺管理**: 商家店铺信息、认证、营业管理
-- 📦 **订单系统**: 订单创建、支付、发货、收货、评价全流程
-- 🛍️ **购物车**: 商品选择、数量管理
-- 🎫 **营销系统**: 优惠券、收藏、浏览历史、搜索记录
-- 🚚 **配送管理**: 配送员管理、配送任务、实时位置跟踪
-- ⭐ **评价系统**: 商品评价、商家回复、匿名评价
-
-### 1.3 技术栈
-- **数据库**: PostgreSQL 13+ / Supabase
-- **前端框架**: uni-app-x (UTS Android 兼容)
-- **认证系统**: Supabase Auth
-- **API方式**: Supabase REST API + PostgREST
-
----
-
-## 二、数据库存储方式
-
-### 2.1 数据库类型
-**PostgreSQL + Supabase 兼容架构**
-
-- **主数据库**: PostgreSQL 13+
-- **云服务**: Supabase (PostgreSQL 托管 + 扩展服务)
-- **兼容性**: 同时支持标准 PostgreSQL 和 Supabase 环境
-
-### 2.2 存储架构设计
-
-#### 2.2.1 表命名规范
-- **前缀策略**: 所有商城表使用 `ml_` 前缀 (mall)
-- **复用策略**: 仅复用 `ak_users` 用户主表,其他表全部独立
-- **命名示例**:
- - `ml_products` - 商品表
- - `ml_orders` - 订单表
- - `ml_user_profiles` - 用户扩展表
-
-#### 2.2.2 数据表结构 (21张表)
-
-| 功能模块 | 表数量 | 主要表名 | 说明 |
-| ------------ | ------ | ---------------------------------------------------------------------------------- | --------------------------- |
-| **用户管理** | 2张 | `ml_user_profiles`, `ml_user_addresses` | 用户扩展信息、地址管理 |
-| **商品管理** | 5张 | `ml_products`, `ml_product_skus`, `ml_categories`, `ml_brands`, `ml_product_specs` | 商品、SKU、分类、品牌、规格 |
-| **店铺管理** | 1张 | `ml_shops` | 商家店铺信息 |
-| **订单管理** | 2张 | `ml_orders`, `ml_order_items` | 订单主表、订单商品明细 |
-| **购物车** | 1张 | `ml_shopping_cart` | 购物车商品 |
-| **营销系统** | 2张 | `ml_coupon_templates`, `ml_user_coupons` | 优惠券模板、用户优惠券 |
-| **配送管理** | 2张 | `ml_delivery_drivers`, `ml_delivery_tasks` | 配送员、配送任务 |
-| **评价系统** | 1张 | `ml_product_reviews` | 商品评价 |
-| **用户行为** | 3张 | `ml_user_favorites`, `ml_browse_history`, `ml_search_history` | 收藏、浏览历史、搜索记录 |
-| **系统配置** | 2张 | `ml_system_configs`, `ml_regions` | 系统配置、地区数据 |
-
-#### 2.2.3 核心设计特性
-
-**1. UUID 主键设计**
-```sql
-id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
-```
-- 所有表使用 UUID 作为主键
-- 支持分布式系统,避免ID冲突
-- 使用 `uuid-ossp` 扩展生成
-
-**2. SEO 友好的自增ID (cid)**
-```sql
-cid SERIAL UNIQUE NOT NULL -- SEO友好的自增ID
-```
-- 为主要表添加 `cid` 字段用于URL生成
-- 提供简洁、语义化的URL路径
-- 例如: `/product/123` 而不是 `/product/uuid-string`
-
-**3. JSONB 灵活数据存储**
-```sql
-image_urls JSONB DEFAULT '[]'
-preferences JSONB DEFAULT '{}'
-specifications JSONB DEFAULT '{}'
-```
-- 使用 JSONB 存储灵活的JSON数据
-- 支持高效查询和索引 (GIN索引)
-- 适合存储数组、对象等非结构化数据
-
-**4. 时间戳字段**
-```sql
-created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-```
-- 标准的时间戳字段
-- 自动记录创建和更新时间
-- 通过触发器自动更新 `updated_at`
-
-**5. 外键约束**
-```sql
-user_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE
-```
-- 完整的引用完整性约束
-- 级联删除保证数据一致性
-- 复用 `ak_users` 表实现单点登录
-
-### 2.3 索引优化策略
-
-#### 2.3.1 索引类型
-- **主键索引**: 自动创建 (UUID)
-- **唯一索引**: 防止数据重复 (`product_code`, `order_no` 等)
-- **外键索引**: 30+ 个优化查询索引
-- **复合索引**: 针对常用查询组合
-- **GIN 索引**: JSON 和数组字段的高效查询
-
-#### 2.3.2 索引示例
-```sql
--- 商品表索引
-CREATE INDEX idx_ml_products_merchant ON public.ml_products(merchant_id);
-CREATE INDEX idx_ml_products_category ON public.ml_products(category_id);
-CREATE INDEX idx_ml_products_status ON public.ml_products(status);
-CREATE INDEX idx_ml_products_cid ON public.ml_products(cid); -- SEO查询
-
--- 订单表索引
-CREATE INDEX idx_ml_orders_user ON public.ml_orders(user_id);
-CREATE INDEX idx_ml_orders_merchant ON public.ml_orders(merchant_id);
-CREATE INDEX idx_ml_orders_status ON public.ml_orders(order_status);
-CREATE INDEX idx_ml_orders_created ON public.ml_orders(created_at DESC);
-
--- JSONB GIN索引
-CREATE INDEX idx_ml_products_images_gin ON public.ml_products USING GIN(image_urls);
-```
-
-### 2.4 数据安全策略 (RLS)
-
-#### 2.4.1 Row Level Security (行级安全)
-- **启用方式**: 所有表启用 RLS 策略
-- **认证方式**: 使用 Supabase `auth.uid()` 进行身份验证
-- **权限模型**: 基于用户角色的细粒度权限控制
-
-#### 2.4.2 RLS 策略示例
-```sql
--- 用户只能访问自己的数据
-CREATE POLICY ml_user_profiles_select_policy ON public.ml_user_profiles
- FOR SELECT USING (
- auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = user_id)
- );
-
--- 商品公开查看,商家管理
-CREATE POLICY ml_products_select_policy ON public.ml_products
- FOR SELECT USING (status = 1); -- 所有人可查看已上架商品
-
-CREATE POLICY ml_products_update_policy ON public.ml_products
- FOR UPDATE USING (
- auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = merchant_id)
- ); -- 商家只能管理自己的商品
-
--- 订单权限:用户和商家都可查看
-CREATE POLICY ml_orders_select_policy ON public.ml_orders
- FOR SELECT USING (
- auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = user_id)
- OR
- auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = merchant_id)
- );
-```
-
-### 2.5 触发器自动化
-
-#### 2.5.1 触发器功能
-| 触发器名称 | 功能 | 应用表 |
-| ------------------------------- | ---------------- | ------------------- |
-| `update_updated_at_column` | 自动更新时间戳 | 8张主要表 |
-| `ensure_single_default_address` | 确保唯一默认地址 | `ml_user_addresses` |
-| `update_product_stock` | 自动更新商品库存 | `ml_product_skus` |
-| `handle_order_status_change` | 订单状态变更处理 | `ml_orders` |
-
-#### 2.5.2 触发器示例
-```sql
--- 自动更新 updated_at
-CREATE TRIGGER trigger_ml_user_profiles_updated_at
- BEFORE UPDATE ON public.ml_user_profiles
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
-
--- 确保唯一默认地址
-CREATE TRIGGER trigger_ensure_single_default_address
- BEFORE INSERT OR UPDATE ON public.ml_user_addresses
- FOR EACH ROW EXECUTE FUNCTION public.ensure_single_default_address();
-```
-
-### 2.6 数据库函数
-
-#### 2.6.1 业务函数
-| 函数名称 | 功能描述 | 返回类型 |
-| ------------------------------- | ---------------- | -------- |
-| `generate_order_no()` | 生成唯一订单号 | TEXT |
-| `generate_coupon_code()` | 生成优惠券码 | TEXT |
-| `get_user_default_address()` | 获取用户默认地址 | TABLE |
-| `is_verified_merchant()` | 检查是否认证商家 | BOOLEAN |
-| `calculate_cart_total()` | 计算购物车总金额 | DECIMAL |
-| `get_product_available_stock()` | 获取商品可用库存 | INTEGER |
-
-#### 2.6.2 函数示例
-```sql
--- 生成订单号
-CREATE OR REPLACE FUNCTION public.generate_order_no()
-RETURNS TEXT AS $$
-BEGIN
- RETURN 'ORD' || TO_CHAR(NOW(), 'YYYYMMDD') || LPAD(NEXTVAL('order_no_seq')::TEXT, 6, '0');
-END;
-$$ LANGUAGE plpgsql;
-
--- 计算购物车总金额
-CREATE OR REPLACE FUNCTION public.calculate_cart_total(p_user_id UUID)
-RETURNS DECIMAL AS $$
-DECLARE
- total DECIMAL(12,2);
-BEGIN
- SELECT COALESCE(SUM(c.quantity * p.base_price), 0)
- INTO total
- FROM ml_shopping_cart c
- JOIN ml_products p ON c.product_id = p.id
- WHERE c.user_id = p_user_id AND c.selected = TRUE;
- RETURN total;
-END;
-$$ LANGUAGE plpgsql;
-```
-
-### 2.7 视图设计
-
-#### 2.7.1 业务视图
-| 视图名称 | 功能描述 |
-| ------------------------- | -------------------------------------- |
-| `ml_users_view` | 商城用户完整信息视图 |
-| `ml_products_detail_view` | 商品详情视图(含分类、品牌、店铺信息) |
-| `ml_orders_detail_view` | 订单详情视图(含客户、商家、状态信息) |
-
-#### 2.7.2 视图示例
-```sql
--- 商品详情视图
-CREATE VIEW ml_products_detail_view AS
-SELECT
- p.*,
- c.name as category_name,
- b.name as brand_name,
- s.shop_name,
- s.shop_logo
-FROM ml_products p
-LEFT JOIN ml_categories c ON p.category_id = c.id
-LEFT JOIN ml_brands b ON p.brand_id = b.id
-LEFT JOIN ml_shops s ON p.merchant_id = s.merchant_id;
-```
-
----
-
-## 三、数据库交互方式
-
-### 3.1 API 架构
-
-#### 3.1.1 Supabase REST API
-- **基础URL**: `https://your-project.supabase.co/rest/v1/`
-- **认证方式**: JWT Token (Bearer Token)
-- **API Key**: `apikey` Header
-- **协议**: HTTP/HTTPS RESTful API
-
-#### 3.1.2 PostgREST 自动生成
-- Supabase 基于 PostgREST 自动生成 REST API
-- 每个表自动获得 CRUD 接口
-- 支持复杂查询、过滤、排序、分页
-
-### 3.2 前端交互方式
-
-#### 3.2.1 Supabase 客户端封装
-项目使用自定义的 Supabase 客户端封装 (`components/supadb/aksupa.uts`):
-
-```typescript
-// 客户端初始化
-const supaClient = new AkSupa({
- baseUrl: 'https://your-project.supabase.co',
- apikey: 'your-anon-key'
-});
-
-// 查询数据
-const response = await supaClient.select('ml_products', null, {
- columns: 'id,name,base_price,main_image_url',
- limit: 20,
- order: 'created_at.desc'
-});
-
-// 插入数据
-const result = await supaClient.insert('ml_orders', {
- user_id: userId,
- merchant_id: merchantId,
- total_amount: 100.00,
- order_status: 1
-});
-
-// 更新数据
-await supaClient.update('ml_products', { id: productId }, {
- status: 2,
- updated_at: new Date().toISOString()
-});
-
-// 删除数据
-await supaClient.delete('ml_user_favorites', { id: favoriteId });
-```
-
-#### 3.2.2 查询选项支持
-```typescript
-type AkSupaSelectOptions = {
- columns?: string; // 选择字段: 'id,name,price'
- limit?: number; // 限制数量
- order?: string; // 排序: 'created_at.desc'
- rangeFrom?: number; // 分页起始
- rangeTo?: number; // 分页结束
- count?: string; // 计数方式: 'exact'|'planned'|'estimated'
- single?: boolean; // 单条记录
- head?: boolean; // 仅返回元数据
-}
-```
-
-#### 3.2.3 过滤条件支持
-```typescript
-// 简单过滤
-const filter = {
- status: 1,
- merchant_id: userId
-};
-
-// 复杂过滤 (PostgREST 操作符)
-const filter = {
- base_price: { gte: 100, lte: 500 }, // 范围查询
- name: { ilike: '%商品%' }, // 模糊查询
- category_id: { in: [id1, id2, id3] }, // IN 查询
- created_at: { gte: '2024-01-01' } // 时间范围
-};
-```
-
-### 3.3 实时数据同步
-
-#### 3.3.1 Supabase Realtime
-- 支持 WebSocket 实时数据同步
-- 表变更自动推送到客户端
-- 适用于订单状态更新、库存变化等场景
-
-```typescript
-// 实时订阅订单状态
-supaClient.realtime.subscribe('ml_orders', {
- filter: `id=eq.${orderId}`,
- event: 'UPDATE',
- callback: (payload) => {
- console.log('订单状态更新:', payload);
- }
-});
-```
-
-### 3.4 存储过程调用 (RPC)
-
-#### 3.4.1 数据库函数调用
-```typescript
-// 调用数据库函数
-const result = await supaClient.rpc('calculate_cart_total', {
- p_user_id: userId
-});
-
-// 调用生成订单号函数
-const orderNo = await supaClient.rpc('generate_order_no');
-```
-
-### 3.5 认证与权限
-
-#### 3.5.1 Supabase Auth 集成
-```typescript
-// 用户登录
-const { data, error } = await supaClient.auth.signInWithPassword({
- email: 'user@example.com',
- password: 'password'
-});
-
-// 获取当前用户
-const user = await supaClient.auth.getUser();
-
-// Token 自动附加到请求头
-// Authorization: Bearer
-```
-
-#### 3.5.2 RLS 自动生效
-- 前端请求自动携带 JWT Token
-- RLS 策略根据 `auth.uid()` 自动过滤数据
-- 用户只能访问被授权的数据
-
-### 3.6 数据迁移与初始化
-
-#### 3.6.1 数据库脚本执行
-```bash
-# PostgreSQL 直接执行
-psql -h localhost -U postgres -d your_database -f complete_mall_database.sql
-
-# Supabase Dashboard 执行
-# 1. 登录 Supabase Dashboard
-# 2. 进入 SQL Editor
-# 3. 复制粘贴 SQL 脚本
-# 4. 执行脚本
-```
-
-#### 3.6.2 模拟数据插入
-```bash
-# 先执行主数据库脚本
-psql -f complete_mall_database.sql
-
-# 再执行模拟数据
-psql -f mock_data_insert.sql
-```
-
----
-
-## 四、开发模式
-
-### 4.1 架构模式
-
-#### 4.1.1 BaaS (Backend as a Service) 模式
-- **特点**: 使用 Supabase 作为后端服务
-- **优势**:
- - 无需自建后端服务器
- - 自动生成 REST API
- - 内置认证、权限、实时同步
- - 减少后端开发工作量
-
-#### 4.1.2 数据库优先 (Database-First) 模式
-- **流程**: 先设计数据库 → 自动生成 API → 前端调用
-- **优势**:
- - 数据结构清晰
- - API 自动生成,减少手写代码
- - 类型安全 (通过 TypeScript/UTS 类型定义)
-
-### 4.2 前端开发模式
-
-#### 4.2.1 uni-app-x 框架
-- **平台**: uni-app-x (跨平台框架)
-- **语言**: UTS (UniApp TypeScript)
-- **兼容性**: 严格遵循 UTS Android 语法规范
-
-#### 4.2.2 类型定义驱动
-```typescript
-// types/mall-types.uts
-export type ProductType = {
- id: string
- merchant_id: string
- category_id: string
- name: string
- description: string | null
- images: Array
- price: number
- stock: number
- status: number
- created_at: string
-}
-```
-
-#### 4.2.3 组件化开发
-- 页面组件: `pages/mall/`
-- 业务组件: `components/`
-- 工具类: `utils/`
-- 类型定义: `types/`
-
-### 4.3 数据访问模式
-
-#### 4.3.1 服务层封装
-```typescript
-// 商品服务
-class ProductService {
- async getProducts(filters: any) {
- return await supaClient.select('ml_products', filters, {
- limit: 20,
- order: 'created_at.desc'
- });
- }
-
- async getProductById(id: string) {
- return await supaClient.select('ml_products', { id }, {
- single: true
- });
- }
-}
-```
-
-#### 4.3.2 响应式数据绑定
-- 使用 uni-app-x 的数据绑定机制
-- 结合 Supabase Realtime 实现实时更新
-- 状态管理通过组件状态或全局状态
-
-### 4.4 安全模式
-
-#### 4.4.1 多层安全防护
-1. **网络层**: HTTPS 加密传输
-2. **认证层**: Supabase Auth JWT Token
-3. **权限层**: RLS 行级安全策略
-4. **应用层**: 前端数据验证
-
-#### 4.4.2 最小权限原则
-- 用户只能访问自己的数据
-- 商家只能管理自己的商品和订单
-- 公开数据 (商品列表) 所有人可查看
-
----
-
-## 五、开发流程
-
-### 5.1 数据库设计流程
-
-#### 5.1.1 需求分析
-1. **业务需求梳理**
- - 商品管理需求
- - 订单流程需求
- - 用户角色需求
- - 营销功能需求
-
-2. **数据模型设计**
- - 实体识别 (商品、订单、用户等)
- - 关系设计 (一对多、多对多)
- - 字段设计 (类型、约束、索引)
-
-#### 5.1.2 数据库脚本编写
-```sql
--- 1. 创建表结构
-CREATE TABLE ml_products (...);
-
--- 2. 创建索引
-CREATE INDEX idx_ml_products_merchant ON ml_products(merchant_id);
-
--- 3. 创建触发器
-CREATE TRIGGER trigger_update_updated_at ...;
-
--- 4. 创建 RLS 策略
-CREATE POLICY ml_products_select_policy ...;
-
--- 5. 创建函数
-CREATE FUNCTION generate_order_no() ...;
-
--- 6. 创建视图
-CREATE VIEW ml_products_detail_view AS ...;
-```
-
-#### 5.1.3 数据库部署
-1. **环境准备**
- - PostgreSQL 13+ 或 Supabase 项目
- - 数据库用户权限配置
-
-2. **脚本执行**
- ```bash
- # 执行主数据库脚本
- psql -f complete_mall_database.sql
-
- # 执行模拟数据 (可选)
- psql -f mock_data_insert.sql
- ```
-
-3. **验证测试**
- ```bash
- # 执行验证脚本
- psql -f validation_test.sql
- ```
-
-### 5.2 前端开发流程
-
-#### 5.2.1 类型定义
-```typescript
-// 1. 定义 TypeScript/UTS 类型
-export type ProductType = {
- id: string
- name: string
- price: number
- // ...
-}
-```
-
-#### 5.2.2 API 服务封装
-```typescript
-// 2. 封装 API 调用
-class MallAPI {
- async getProducts() {
- return await supaClient.select('ml_products', ...);
- }
-}
-```
-
-#### 5.2.3 页面开发
-```vue
-
-
-
-
- {{ product.name }}
-
-
-
-
-
-```
-
-#### 5.2.4 测试验证
-- 功能测试: 验证业务流程
-- 权限测试: 验证 RLS 策略
-- 性能测试: 验证查询性能
-
-### 5.3 迭代开发流程
-
-#### 5.3.1 功能迭代
-1. **需求变更** → 数据库迁移脚本
-2. **表结构更新** → `mall_alter_upgrade.sql`
-3. **数据迁移** → 迁移脚本执行
-4. **前端适配** → 类型定义更新 → 页面更新
-
-#### 5.3.2 版本管理
-- **数据库版本**: 通过迁移脚本管理
-- **代码版本**: Git 版本控制
-- **文档版本**: Markdown 文档同步更新
-
-### 5.4 部署流程
-
-#### 5.4.1 开发环境
-1. 本地 PostgreSQL 或 Supabase 本地实例
-2. 执行数据库脚本
-3. 配置环境变量
-4. 启动前端开发服务器
-
-#### 5.4.2 生产环境
-1. **Supabase 云服务部署**
- - 创建 Supabase 项目
- - 执行数据库脚本
- - 配置环境变量
- - 部署前端应用
-
-2. **自建 PostgreSQL 部署**
- - 搭建 PostgreSQL 服务器
- - 执行数据库脚本
- - 配置 Nginx 反向代理 (如需要)
- - 部署前端应用
-
----
-
-## 六、技术架构总结
-
-### 6.1 技术栈总结
-
-| 层级 | 技术 | 说明 |
-| ------------ | -------------- | ----------------- |
-| **数据库** | PostgreSQL 13+ | 关系型数据库 |
-| **BaaS平台** | Supabase | 后端即服务 |
-| **API层** | PostgREST | 自动生成 REST API |
-| **认证** | Supabase Auth | JWT Token 认证 |
-| **前端框架** | uni-app-x | 跨平台框架 |
-| **开发语言** | UTS | UniApp TypeScript |
-| **类型系统** | TypeScript/UTS | 类型安全 |
-
-### 6.2 架构特点
-
-#### ✅ 优势
-1. **开发效率高**: BaaS 模式减少后端开发
-2. **类型安全**: 完整的类型定义系统
-3. **自动API**: PostgREST 自动生成 REST API
-4. **权限完善**: RLS 行级安全策略
-5. **实时同步**: Supabase Realtime 支持
-6. **扩展性强**: 数据库函数、触发器、视图支持
-
-#### ⚠️ 注意事项
-1. **Supabase 依赖**: 深度依赖 Supabase 生态
-2. **学习曲线**: 需要熟悉 PostgreSQL 和 Supabase
-3. **成本考虑**: Supabase 云服务有使用限制
-4. **迁移成本**: 如需迁移到其他平台,成本较高
-
-### 6.3 最佳实践
-
-1. **数据库设计优先**: 先设计好数据库结构
-2. **类型定义同步**: 保持数据库和类型定义同步
-3. **RLS 策略完善**: 确保数据安全
-4. **索引优化**: 针对查询场景优化索引
-5. **文档完善**: 保持文档与代码同步
-
----
-
-## 📚 相关文档
-
-- [数据库创建报告](./database/database_creation_report.md)
-- [数据库语法修正报告](./database/database_syntax_fix_report.md)
-- [完整部署指南](./database/complete_deployment_guide.md)
-- [用户表复用方案](./user_reuse_summary.md)
-- [前后端联调指南](./FRONTEND_BACKEND_DEBUGGING.md) ⭐ **新增**
-- [模块README](./README.md)
-
----
-
-**生成时间**: 2025年1月
-**版本**: v1.0
-**状态**: ✅ 完整分析报告
diff --git a/mall/doc_mall/QUICK_START_MIGRATION.md b/mall/doc_mall/QUICK_START_MIGRATION.md
deleted file mode 100644
index e26d3078..00000000
--- a/mall/doc_mall/QUICK_START_MIGRATION.md
+++ /dev/null
@@ -1,111 +0,0 @@
-# ⚡ 快速开始迁移
-
-## 🚀 快速执行迁移
-
-### Windows (PowerShell)
-
-#### 1. 预览模式(推荐先执行)
-```powershell
-cd doc_mall
-.\migrate.ps1 -TargetPath "D:\path\to\new-repo" -DryRun
-```
-
-#### 2. 执行迁移
-```powershell
-cd doc_mall
-.\migrate.ps1 -TargetPath "D:\path\to\new-repo"
-```
-
-#### 3. 包含 Supabase 组件
-```powershell
-.\migrate.ps1 -TargetPath "D:\path\to\new-repo" -CopySupabaseComponents
-```
-
-#### 4. 包含工具函数
-```powershell
-.\migrate.ps1 -TargetPath "D:\path\to\new-repo" -CopyUtils
-```
-
-### Linux/Mac (Bash)
-
-#### 1. 预览模式
-```bash
-cd doc_mall
-chmod +x migrate.sh
-./migrate.sh /path/to/new-repo --dry-run
-```
-
-#### 2. 执行迁移
-```bash
-./migrate.sh /path/to/new-repo
-```
-
-#### 3. 包含可选组件
-```bash
-./migrate.sh /path/to/new-repo --copy-supabase --copy-utils
-```
-
----
-
-## 📋 迁移后的必要步骤
-
-### 1. 检查迁移结果
-```powershell
-# 检查目标目录
-ls D:\path\to\new-repo\doc_mall
-ls D:\path\to\new-repo\pages\mall
-ls D:\path\to\new-repo\types
-```
-
-### 2. 配置 Supabase
-
-创建配置文件 `config/supabase.config.ts`:
-```typescript
-export const supabaseConfig = {
- url: 'https://your-project.supabase.co',
- anonKey: 'your-anon-key',
-}
-```
-
-### 3. 执行数据库脚本
-
-#### 方式 1: Supabase Dashboard
-1. 登录 Supabase Dashboard
-2. 进入 SQL Editor
-3. 复制 `doc_mall/database/complete_mall_database.sql` 内容
-4. 执行脚本
-
-#### 方式 2: psql 命令行
-```bash
-psql -h your-host -U postgres -d your_database -f doc_mall/database/complete_mall_database.sql
-```
-
-### 4. 验证数据库
-```bash
-psql -h your-host -U postgres -d your_database -f doc_mall/database/validation_test.sql
-```
-
-### 5. 插入测试数据(可选)
-```bash
-psql -h your-host -U postgres -d your_database -f doc_mall/database/mock_data_insert.sql
-```
-
----
-
-## ✅ 验证清单
-
-- [ ] 文件已复制到目标目录
-- [ ] 目录结构正确
-- [ ] Supabase 配置已更新
-- [ ] 数据库脚本已执行
-- [ ] 数据库验证通过
-- [ ] 项目可以编译
-- [ ] 页面可以正常加载
-
----
-
-## 📚 更多信息
-
-- 详细迁移指南: [MIGRATION_GUIDE.md](./MIGRATION_GUIDE.md)
-- 完整检查清单: [MIGRATION_CHECKLIST.md](./MIGRATION_CHECKLIST.md)
-- 技术实现文档: [TECHNICAL_IMPLEMENTATION.md](./TECHNICAL_IMPLEMENTATION.md)
diff --git a/mall/doc_mall/README.md b/mall/doc_mall/README.md
deleted file mode 100644
index 568aa3f4..00000000
--- a/mall/doc_mall/README.md
+++ /dev/null
@@ -1,216 +0,0 @@
-# 商城系统文档目录
-
-## 📁 目录结构
-
-```
-doc_mall/
-├── README.md # 本文件 - 文档目录索引
-├── user_reuse_summary.md # 用户表复用方案总结
-├── analysis/ # 分析文档
-│ └── user_compatibility_analysis.md # 用户表兼容性详细分析
-├── database/ # 数据库相关
-│ ├── complete_mall_database.sql # 🎯 完整商城数据库(推荐使用)
-│ ├── database_creation_report.md # 📊 数据库创建完成报告
-│ ├── database_syntax_fix_report.md # 数据库语法修正报告
-│ ├── user_compatibility_implementation.sql # 用户兼容性实施脚本
-│ ├── product_database.sql # 商品数据库设计脚本
-│ ├── mock_data_insert.sql # 模拟数据插入脚本
-│ ├── mock_data_documentation.md # 模拟数据说明文档
-│ ├── deployment_guide.md # 快速部署指南
-│ ├── validation_test.sql # 数据库验证测试脚本
-│ └── complete_deployment_guide.md # 完整部署与测试指南
-└── reports/ # 生成报告
- ├── system_generation_report.md # 系统生成报告
- ├── detail_pages_report.md # 详情页生成报告
- └── profile_pages_report.md # 个人中心页面报告
-```
-
-## 📋 文档说明
-
-### 核心文档
-
-#### 📊 [模块深度分析报告](./MODULE_ANALYSIS.md) ⭐ **新增**
-- **内容**: 完整的模块分析,包括数据库存储、交互方式、开发模式、开发流程
-- **适用**: 了解模块整体架构和设计理念
-
-#### 🔧 [技术实现拆解](./TECHNICAL_IMPLEMENTATION.md) ⭐ **新增**
-- **内容**: 详细的技术实现拆解,包括数据库层、API层、前端实现、数据流机制
-- **适用**: 深入了解具体实现细节和开发方式
-
-#### 🔗 [前后端联调指南](./FRONTEND_BACKEND_DEBUGGING.md) ⭐ **新增**
-- **内容**: 完整的前后端联调指南,包括环境配置、调试工具、常见问题
-- **适用**: 开发调试和问题排查
-
-#### 🎯 [用户表复用方案总结](./user_reuse_summary.md)
-- **问题**: 商城系统是否可以复用运动训练平台的 `ak_users` 用户表?
-- **结论**: ✅ 可以复用,采用混合扩展方案
-- **方案**: 保持 `ak_users` 主表不变,增加商城扩展表
-- **优势**: 单点登录、数据一致性、业务隔离
-
-#### 🔍 [用户兼容性详细分析](./analysis/user_compatibility_analysis.md)
-- 字段级兼容性对比分析
-- 三种方案对比(共用/独立/混合)
-- 风险评估和解决方案
-- 具体实施步骤和建议
-
-### 数据库脚本
-
-#### 🎯 [完整商城数据库](./database/complete_mall_database.sql) **← 推荐使用**
-- **全新设计**: 使用 `ml_` 前缀的独立商城数据库
-- **复用优化**: 仅复用 `ak_users` 用户主表
-- **功能完整**: 21张表覆盖所有商城功能
-- **Supabase优化**: 包含RLS策略、触发器、函数、视图
-- **性能优化**: 完整索引设计和查询优化
-
-#### 📊 [数据库创建报告](./database/database_creation_report.md)
-- 详细的数据库架构说明
-- 21张表的功能分析和设计理念
-- 索引、触发器、函数、视图的完整清单
-- 部署步骤和性能优化建议
-
-#### 🛠️ [数据库语法修正报告](./database/database_syntax_fix_report.md)
-- 修正了RLS策略的语法错误
-- 提供了修正前后的对比
-- 包含常见问题解答和修正建议
-
-#### 🔧 [类型错误修正报告](./database/type_error_fix_report.md)
-- **问题分析**: auth_id 字段 UUID 类型错误的详细分析
-- **修正措施**: 完整的问题解决方案和预防措施
-- **验证工具**: 新增的验证脚本和部署指南
-- **流程优化**: 改进的部署流程和错误监控建议
-
-#### 🎯 [SEO 优化实施报告](./database/seo_optimization_report.md)
-- **优化成果**: CID 自增字段的完整实施效果
-- **性能提升**: URL 结构、查询性能、存储空间的全面优化
-- **技术细节**: 索引、视图、函数的具体实现
-- **收益分析**: SEO 表现、用户体验、开发效率的预期提升
-
-#### 💾 [用户兼容性实施脚本](./database/user_compatibility_implementation.sql)
-- 商城用户扩展表 `mall_user_profiles`
-- 用户地址表 `ak_user_addresses`
-- 用户收藏、搜索、浏览历史表
-- 触发器、索引、RLS策略
-- 数据迁移和权限设置
-
-#### 🛍️ [商品数据库设计脚本](./database/product_database.sql)
-- 完整的商品管理数据库设计
-- 商品、SKU、分类、品牌、规格等表
-- 支持多规格、库存管理、营销活动
-- 推荐使用独立商品表,不复用 `ak_contents`
-
-#### 🔍 [数据库验证测试脚本](./database/validation_test.sql)
-- **环境检查**: 验证 PostgreSQL 扩展和依赖项
-- **表结构验证**: 检查 `ak_users` 表和商城表的完整性
-- **语法测试**: 验证 RLS 策略和 UUID 类型的正确性
-- **数据统计**: 检查模拟数据的插入情况
-
-#### 📚 [完整部署与测试指南](./database/complete_deployment_guide.md)
-- **部署前检查**: 详细的环境要求和准备工作
-- **分步骤部署**: PostgreSQL 和 Supabase 的完整部署流程
-- **验证测试**: 部署后的功能验证和性能检查
-- **问题解决**: 常见错误的详细解决方案和预防措施
-- **维护建议**: 数据维护、备份和性能优化指导
-
-#### 🧪 [模拟数据插入脚本](./database/mock_data_insert.sql)
-- **测试专用**: 为开发和测试生成完整的模拟数据
-- **数据丰富**: 包含8个测试用户、6个商品、多个订单等
-- **场景完整**: 涵盖购物车、优惠券、评价、配送等业务场景
-- **依赖**: 需要先执行 `complete_mall_database.sql`
-
-#### 📋 [模拟数据说明文档](./database/mock_data_documentation.md)
-- **详细说明**: 所有测试数据的详细说明和使用指南
-- **用户角色**: 8个测试用户的账号信息和权限说明
-- **测试场景**: 完整的业务流程测试建议
-- **数据维护**: 数据更新和维护的最佳实践
-
-#### 🚀 [快速部署指南](./database/deployment_guide.md)
-- **部署步骤**: PostgreSQL 和 Supabase 的详细部署指南
-- **执行顺序**: 脚本执行的正确顺序和注意事项
-- **测试验证**: 部署后的功能验证和性能测试
-- **问题排查**: 常见问题的解决方案和检查清单
-
-#### 🔍 [SEO 优化指南](./database/seo_optimization_guide.md)
-- **CID 自增字段**: 为主要表添加 SEO 友好的自增 ID
-- **URL 结构优化**: 提供简洁、语义化的 URL 路径
-- **函数工具**: 完整的 SEO 相关查询和工具函数
-- **前端集成**: Vue Router 配置和 API 调用示例
-- **性能监控**: 索引优化和查询性能监控指导
-
-### 生成报告
-
-#### 📊 [系统生成报告](./reports/system_generation_report.md)
-- 6个角色端首页代码生成完成
-- 类型定义和UTS Android兼容性说明
-- 页面功能模块和技术特点总结
-
-#### 📄 [详情页生成报告](./reports/detail_pages_report.md)
-- 商品详情、订单详情、店铺详情等页面
-- 具体功能实现和代码结构
-- UTS Android语法规范遵循情况
-
-#### 👤 [个人中心页面报告](./reports/profile_pages_report.md)
-- 6个角色端个人中心页面生成
-- 用户信息管理、设置、统计等功能
-- 响应式设计和现代UI实现
-
-## 🔗 相关文件
-
-### 类型定义
-- `../types/mall-types.uts` - 商城系统完整类型定义
-
-### 页面代码
-- `../pages/mall/` - 所有角色端页面代码
-- `../pages/mall/pages-config.json` - 页面路由配置
-
-### 订阅功能(本次实现)
-- 数据库脚本:`./create_mall_subscription_tables.sql`
-- RLS/权限:`./subscription_rls_policies.sql`
-- 消费端页面:
- - `../pages/mall/consumer/subscription/plan-list.uvue`
- - `../pages/mall/consumer/subscription/plan-detail.uvue`
- - `../pages/mall/consumer/subscription/subscribe-checkout.uvue`
- - `../pages/mall/consumer/subscription/my-subscriptions.uvue`
-- 管理端页面:
- - `../pages/mall/admin/subscription/plan-management.uvue`
- - `../pages/mall/admin/subscription/user-subscriptions.uvue`
-
-### 业务需求
-- `../mall.md` - 原始业务需求文档
-
-## 🎯 核心结论
-
-### 🆕 最新推荐方案
-✅ **使用完整商城数据库设计**:
-- 使用 `complete_mall_database.sql` 创建独立商城系统
-- 仅复用 `ak_users` 用户主表,其他表全部独立
-- 包含 20+ 张表,覆盖用户、商品、订单、营销、配送等全部功能
-- 优化的 Supabase 兼容设计(RLS、触发器、函数、视图)
-
-### 用户表复用方案
-✅ **推荐采用混合扩展方案**:
-- 保持 `ak_users` 表作为用户主表
-- 创建 `ml_user_profiles` 商城扩展表
-- 新建 `ml_user_addresses` 地址管理表
-- 实现业务数据隔离的同时保持账号统一
-
-### 商品表设计方案
-❌ **不推荐复用 `ak_contents` 表**:
-- 语义不匹配、字段冲突、业务逻辑差异
-- 强烈建议使用独立的商品数据库设计
-
-### 技术实现标准
-✅ **严格遵循UTS Android兼容性**:
-- 全部使用 `type` 声明,避免 `interface`
-- 数组类型使用 `Array` 格式
-- 无 `undefined` 类型,变量类型明确
-- JSON对象使用 `UTSJSONObject`
-
-## 📞 支持
-
-本文档集涵盖了商城系统与运动训练平台用户表复用的完整分析和实施方案。如需了解更多技术细节,请查看相应的具体文档文件。
-
----
-
-**生成时间**: 2025年7月11日
-**版本**: v1.0
-**状态**: ✅ 已完成分析和实施方案
diff --git a/mall/doc_mall/README_subscription_consumer.md b/mall/doc_mall/README_subscription_consumer.md
deleted file mode 100644
index f7728a8e..00000000
--- a/mall/doc_mall/README_subscription_consumer.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# 软件订阅(consumer)
-
-入口:
-- 用户中心 -> 软件订阅
-
-页面:
-- plan-list.uvue:展示可用订阅方案(ml_subscription_plans)
-- plan-detail.uvue:展示某个订阅方案详情
-- subscribe-checkout.uvue:确认支付并创建订阅(写入 ml_user_subscriptions)
-
-依赖表(示例名称,可按实际后端调整):
-- ml_subscription_plans(id, plan_code, name, description, features jsonb, price numeric, currency text, billing_period text, trial_days int, is_active bool, sort_order int, created_at, updated_at)
-- ml_user_subscriptions(id, user_id, plan_id, status text, start_date timestamptz, end_date timestamptz, next_billing_date timestamptz, auto_renew bool, cancel_at_period_end bool, metadata jsonb, created_at, updated_at)
-
-注意:
-- 本实现使用 uni-app-x 兼容组件与 supaClient。实际支付请替换为你们的支付网关,并在后端完成对账与签名校验。
diff --git a/mall/doc_mall/SUPABASE_DATA_MIGRATION_GUIDE.md b/mall/doc_mall/SUPABASE_DATA_MIGRATION_GUIDE.md
deleted file mode 100644
index b0fa749e..00000000
--- a/mall/doc_mall/SUPABASE_DATA_MIGRATION_GUIDE.md
+++ /dev/null
@@ -1,247 +0,0 @@
-# Supabase 数据迁移指南
-
-## 概述
-
-本指南将帮助您将当前使用模拟数据的 uni-app 项目迁移到使用 Supabase 数据库。您的项目已经配置了连接到 Ubuntu 服务器上的 Supabase(IP: 192.168.1.61),现在需要创建数据库表并插入测试数据,然后修改前端代码以使用真实数据。
-
-## 第一步:在 Supabase 中创建数据库表
-
-### 方法一:通过 Supabase Dashboard 执行 SQL
-
-1. **打开 Supabase Dashboard**
- - 访问:http://192.168.1.61:3000
- - 使用 Dashboard 用户名和密码登录(位于 `supabase_pro/.env` 中的 `DASHBOARD_USERNAME` 和 `DASHBOARD_PASSWORD`)
-
-2. **进入 SQL Editor**
- - 在左侧菜单中点击 "SQL Editor"
- - 点击 "New query" 创建新查询
-
-3. **执行建表脚本**
- - 复制 `sql/001_create_tables.sql` 文件中的全部内容
- - 粘贴到 SQL Editor 中
- - 点击 "Run" 执行
-
-4. **执行插入数据脚本**
- - 复制 `sql/002_insert_test_data.sql` 文件中的全部内容
- - 粘贴到 SQL Editor 中
- - 点击 "Run" 执行
-
-### 方法二:通过命令行执行(如果 Supabase 运行在 Ubuntu 服务器上)
-
-```bash
-# 登录到 Ubuntu 服务器
-ssh hfkj@192.168.1.61
-
-# 进入 Supabase 项目目录(假设 Supabase 安装在默认位置)
-cd ~/supabase
-
-# 使用 psql 连接到数据库执行 SQL 脚本
-# 注意:需要知道数据库密码(位于 supabase_pro/.env 中的 POSTGRES_PASSWORD)
-PGPASSWORD=yxyHINygZMLSq9jLddrZQBB-CoyGHSF5DwlwWmbrYXc psql -h localhost -U postgres -d postgres -f /path/to/001_create_tables.sql
-PGPASSWORD=yxyHINygZMLSq9jLddrZQBB-CoyGHSF5DwlwWmbrYXc psql -h localhost -U postgres -d postgres -f /path/to/002_insert_test_data.sql
-```
-
-## 第二步:验证数据表创建成功
-
-### 在 Supabase Dashboard 中验证
-
-1. **查看 Tables**
- - 在左侧菜单中点击 "Table Editor"
- - 应该能看到 `categories` 和 `products` 表
-
-2. **查看数据**
- - 点击 `categories` 表,应该能看到 10 条分类数据
- - 点击 `products` 表,应该能看到 18 条商品数据
-
-### 通过 API 验证
-
-1. **测试分类 API**
- ```
- GET http://192.168.1.61:8000/rest/v1/categories
- Headers:
- apikey: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlIiwiaWF0IjoxNzY4ODMwNjI0LCJleHAiOjE5MjY1MTA2MjR9.mDVl-kIOdRK9v6VTxo0TDF8r7X7xk3PZXazaavHyVvg
- ```
-
-2. **测试商品 API**
- ```
- GET http://192.168.1.61:8000/rest/v1/products?category_id=eq.cold
- Headers:
- apikey: [同上]
- ```
-
-## 第三步:修改前端代码使用真实数据
-
-### 1. 已创建的服务文件
-
-我已经创建了 `utils/supabaseService.uts` 文件,提供了以下功能:
-- `getCategories()` - 获取所有分类
-- `getProductsByCategory()` - 获取指定分类的商品
-- `searchProducts()` - 搜索商品
-- `getProductById()` - 获取单个商品详情
-- `getHotProducts()` - 获取热销商品
-- `getRecommendedProducts()` - 获取推荐商品
-
-### 2. 修改分类页面 (`pages/mall/consumer/category.uvue`)
-
-需要将硬编码的模拟数据替换为从 Supabase 获取的数据:
-
-```typescript
-// 在 script 部分添加导入
-import supabaseService from '@/utils/supabaseService.uts'
-import type { Category, Product } from '@/utils/supabaseService.uts'
-
-// 替换 medicineCategories 的初始化
-// 删除原有的 medicineCategories 数组定义
-
-// 修改 onMounted 或创建新的生命周期函数
-onMounted(async () => {
- await loadCategories()
- await loadProducts()
-})
-
-// 添加加载分类的方法
-const loadCategories = async () => {
- const categories = await supabaseService.getCategories()
- if (categories.length > 0) {
- primaryCategories.value = categories
- // 设置默认选中第一个分类
- if (!activePrimary.value && categories[0]) {
- activePrimary.value = categories[0].id
- }
- }
-}
-
-// 修改 selectPrimaryCategory 方法
-const selectPrimaryCategory = async (categoryId: string) => {
- activePrimary.value = categoryId
-
- // 更新当前分类信息
- const category = primaryCategories.value.find(cat => cat.id === categoryId)
- if (category) {
- currentCategoryName.value = category.name
- currentCategoryDesc.value = category.description
- }
-
- // 加载对应商品
- const response = await supabaseService.getProductsByCategory(categoryId)
- productList.value = response.data
- hasMore.value = response.hasmore
-}
-```
-
-### 3. 修改主页 (`pages/mall/consumer/index.uvue`)
-
-如果主页显示商品,也需要修改为从 Supabase 获取:
-
-```typescript
-import supabaseService from '@/utils/supabaseService.uts'
-
-// 获取热销商品
-const loadHotProducts = async () => {
- hotProducts.value = await supabaseService.getHotProducts(6)
-}
-
-// 获取推荐商品
-const loadRecommendedProducts = async () => {
- recommendedProducts.value = await supabaseService.getRecommendedProducts(6)
-}
-```
-
-## 第四步:测试连接和数据
-
-### 1. 测试 Supabase 连接
-
-创建一个测试页面或使用现有的页面测试连接:
-
-```typescript
-// 测试代码示例
-const testConnection = async () => {
- try {
- const categories = await supabaseService.getCategories()
- console.log('连接成功,获取到分类数:', categories.length)
- uni.showToast({
- title: `连接成功,获取到 ${categories.length} 个分类`,
- icon: 'success'
- })
- } catch (error) {
- console.error('连接失败:', error)
- uni.showToast({
- title: '连接失败,请检查配置',
- icon: 'error'
- })
- }
-}
-```
-
-### 2. 测试数据加载
-
-在分类页面测试:
-1. 打开分类页面
-2. 检查分类列表是否显示
-3. 点击不同分类,检查商品列表是否更新
-4. 检查商品图片、价格等信息是否正确显示
-
-### 3. 测试搜索功能
-
-如果项目有搜索页面,测试搜索功能:
-1. 输入关键字搜索
-2. 检查返回的商品是否相关
-
-## 第五步:处理图片 URL
-
-### 当前情况
-- 数据库中的 `image` 字段目前为空或使用本地路径
-- 实际项目中,图片应该存储在 Supabase Storage 或 CDN
-
-### 临时解决方案
-在显示图片时,如果数据库中没有图片 URL,使用默认图片:
-
-```typescript
-const getProductImage = (product: Product) => {
- if (product.image && product.image.startsWith('http')) {
- return product.image
- }
- return '/static/images/default-product.png'
-}
-```
-
-### 长期解决方案
-1. 将图片上传到 Supabase Storage
-2. 更新数据库中的 `image` 字段为完整 URL
-
-## 常见问题解决
-
-### 1. 连接超时或失败
-- 检查 Ubuntu 服务器上的 Supabase 是否正常运行
-- 检查防火墙设置,确保 8000 和 3000 端口可访问
-- 检查 `ak/config.uts` 中的 IP 地址是否正确
-
-### 2. 401 未授权错误
-- 检查 `SUPA_KEY` 是否正确(与 `supabase_pro/.env` 中的 `ANON_KEY` 一致)
-- 检查 Supabase 是否已启用匿名访问
-
-### 3. 表不存在错误
-- 确认已执行 SQL 脚本创建表
-- 检查表名是否拼写正确(区分大小写)
-
-### 4. 数据不显示
-- 检查浏览器控制台是否有错误
-- 检查网络请求是否成功
-- 确认数据库中有数据
-
-## 下一步优化建议
-
-1. **添加加载状态**:在数据加载时显示加载动画
-2. **错误处理**:添加更完善的错误处理和重试机制
-3. **数据缓存**:使用本地存储缓存常用数据,减少网络请求
-4. **分页加载**:实现滚动加载更多商品
-5. **图片优化**:使用图片懒加载和压缩
-
-## 总结
-
-通过以上步骤,您的项目将从使用模拟数据过渡到使用 Supabase 数据库数据。主要工作包括:
-1. 在 Supabase 中创建表和插入测试数据
-2. 修改前端代码使用新的服务层
-3. 测试连接和数据加载
-
-完成后,您的应用将具备完整的后端数据支持,为后续添加用户管理、购物车、订单等功能打下基础。
diff --git a/mall/doc_mall/TECHNICAL_IMPLEMENTATION.md b/mall/doc_mall/TECHNICAL_IMPLEMENTATION.md
deleted file mode 100644
index 17b2546d..00000000
--- a/mall/doc_mall/TECHNICAL_IMPLEMENTATION.md
+++ /dev/null
@@ -1,1431 +0,0 @@
-# 🔨 doc_mall 模块技术实现拆解
-
-## 📋 目录
-1. [整体架构](#整体架构)
-2. [数据库层实现](#数据库层实现)
-3. [后端/API层实现](#后端api层实现)
-4. [前端实现](#前端实现)
-5. [数据流机制](#数据流机制)
-6. [业务逻辑实现](#业务逻辑实现)
-7. [安全机制](#安全机制)
-8. [性能优化](#性能优化)
-
----
-
-## 一、整体架构
-
-### 1.1 技术栈架构图
-
-```
-┌─────────────────────────────────────────────────────────┐
-│ 前端层 (uni-app-x) │
-│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────┐ │
-│ │ 消费者端 │ │ 商家端 │ │ 配送端 │ │ 管理端 │ │
-│ └──────────┘ └──────────┘ └──────────┘ └─────────┘ │
-│ │ │ │ │ │
-│ └──────────────┴──────────────┴────────────┘ │
-│ │ │
-│ ┌───────────▼───────────┐ │
-│ │ Supabase 客户端封装 │ │
-│ │ (AkSupa.uts) │ │
-│ └───────────┬───────────┘ │
-└──────────────────────────┼──────────────────────────────┘
- │ HTTPS REST API
-┌───────────────────────────▼──────────────────────────────┐
-│ API 层 (PostgREST) │
-│ ┌──────────────────────────────────────────────────┐ │
-│ │ 自动生成 REST API │ │
-│ │ - GET /rest/v1/ml_products │ │
-│ │ - POST /rest/v1/ml_orders │ │
-│ │ - RPC /rest/v1/rpc/calculate_cart_total │ │
-│ └──────────────────────────────────────────────────┘ │
-└───────────────────────────┬──────────────────────────────┘
- │
-┌───────────────────────────▼──────────────────────────────┐
-│ 认证层 (Supabase Auth) │
-│ ┌──────────────────────────────────────────────────┐ │
-│ │ JWT Token 认证 │ │
-│ │ - 用户登录/注册 │ │
-│ │ - Token 刷新 │ │
-│ │ - 权限验证 │ │
-│ └──────────────────────────────────────────────────┘ │
-└───────────────────────────┬──────────────────────────────┘
- │
-┌───────────────────────────▼──────────────────────────────┐
-│ 权限层 (RLS - Row Level Security) │
-│ ┌──────────────────────────────────────────────────┐ │
-│ │ 行级安全策略 │ │
-│ │ - 用户数据隔离 │ │
-│ │ - 商家权限控制 │ │
-│ │ - 公开数据访问 │ │
-│ └──────────────────────────────────────────────────┘ │
-└───────────────────────────┬──────────────────────────────┘
- │
-┌───────────────────────────▼──────────────────────────────┐
-│ 数据库层 (PostgreSQL) │
-│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────┐ │
-│ │ 表结构 │ │ 触发器 │ │ 函数 │ │ 视图 │ │
-│ │ 索引 │ │ RLS策略 │ │ 序列 │ │ 扩展 │ │
-│ └──────────┘ └──────────┘ └──────────┘ └─────────┘ │
-└─────────────────────────────────────────────────────────┘
-```
-
-### 1.2 核心设计模式
-
-#### BaaS (Backend as a Service) 模式
-- **特点**: 使用 Supabase 作为后端服务,无需自建后端服务器
-- **优势**:
- - 自动生成 REST API
- - 内置认证和权限系统
- - 实时数据同步
- - 减少后端开发工作量
-
-#### 数据库优先 (Database-First) 模式
-- **流程**: 数据库设计 → 自动生成 API → 前端调用
-- **实现**:
- 1. 设计数据库表结构
- 2. PostgREST 自动生成 REST API
- 3. 前端通过 Supabase 客户端调用
-
-#### 类型驱动开发 (Type-Driven Development)
-- **实现**: TypeScript/UTS 类型定义
-- **文件**: `types/mall-types.uts`
-- **优势**: 类型安全、代码提示、减少错误
-
----
-
-## 二、数据库层实现
-
-### 2.1 表结构设计
-
-#### 2.1.1 核心表结构
-
-**用户扩展表** (`ml_user_profiles`)
-```sql
-CREATE TABLE public.ml_user_profiles (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- user_id UUID UNIQUE NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
- status INTEGER DEFAULT 1, -- 1:正常 2:冻结 3:注销 4:待审核
- real_name VARCHAR(100), -- 真实姓名
- id_card VARCHAR(32), -- 身份证号
- credit_score INTEGER DEFAULT 100, -- 信用分数 0-1000
- verification_status INTEGER DEFAULT 0, -- 认证状态
- verification_data JSONB DEFAULT '{}', -- 认证相关数据
- preferences JSONB DEFAULT '{}', -- 用户偏好设置
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-);
-```
-
-**商品表** (`ml_products`)
-```sql
-CREATE TABLE public.ml_products (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- cid SERIAL UNIQUE NOT NULL, -- SEO友好的自增ID
- merchant_id UUID NOT NULL REFERENCES public.ak_users(id),
- category_id UUID NOT NULL REFERENCES public.ml_categories(id),
- brand_id UUID REFERENCES public.ml_brands(id),
- product_code VARCHAR(100) UNIQUE NOT NULL,
- name VARCHAR(500) NOT NULL,
- description TEXT,
- main_image_url TEXT,
- image_urls JSONB DEFAULT '[]', -- 商品图片数组
- base_price DECIMAL(12,2) NOT NULL,
- total_stock INTEGER DEFAULT 0,
- available_stock INTEGER DEFAULT 0,
- status INTEGER DEFAULT 1, -- 1:上架 2:下架 3:草稿 4:删除
- view_count INTEGER DEFAULT 0,
- sale_count INTEGER DEFAULT 0,
- rating_avg DECIMAL(3,2) DEFAULT 0.00,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-);
-```
-
-**订单表** (`ml_orders`)
-```sql
-CREATE TABLE public.ml_orders (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- cid SERIAL UNIQUE NOT NULL,
- order_no VARCHAR(50) UNIQUE NOT NULL,
- user_id UUID NOT NULL REFERENCES public.ak_users(id),
- merchant_id UUID NOT NULL REFERENCES public.ak_users(id),
- product_amount DECIMAL(12,2) NOT NULL DEFAULT 0,
- discount_amount DECIMAL(12,2) DEFAULT 0,
- shipping_fee DECIMAL(12,2) DEFAULT 0,
- total_amount DECIMAL(12,2) NOT NULL,
- shipping_address JSONB NOT NULL, -- 收货地址JSON
- order_status INTEGER DEFAULT 1, -- 1:待支付 2:待发货 3:待收货 4:已完成
- payment_status INTEGER DEFAULT 1, -- 1:未支付 2:已支付 3:部分退款 4:全额退款
- shipping_status INTEGER DEFAULT 1, -- 1:未发货 2:已发货 3:运输中 4:已送达
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-);
-```
-
-### 2.2 索引设计
-
-#### 2.2.1 性能优化索引
-
-```sql
--- 商品表索引
-CREATE INDEX idx_ml_products_merchant ON public.ml_products(merchant_id);
-CREATE INDEX idx_ml_products_category ON public.ml_products(category_id);
-CREATE INDEX idx_ml_products_status ON public.ml_products(status);
-CREATE INDEX idx_ml_products_cid ON public.ml_products(cid); -- SEO查询
-CREATE INDEX idx_ml_products_created ON public.ml_products(created_at DESC);
-
--- 订单表索引
-CREATE INDEX idx_ml_orders_user ON public.ml_orders(user_id);
-CREATE INDEX idx_ml_orders_merchant ON public.ml_orders(merchant_id);
-CREATE INDEX idx_ml_orders_status ON public.ml_orders(order_status);
-CREATE INDEX idx_ml_orders_created ON public.ml_orders(created_at DESC);
-
--- JSONB GIN索引(用于JSON字段查询)
-CREATE INDEX idx_ml_products_images_gin ON public.ml_products USING GIN(image_urls);
-CREATE INDEX idx_ml_orders_address_gin ON public.ml_orders USING GIN(shipping_address);
-```
-
-### 2.3 触发器实现
-
-#### 2.3.1 自动更新时间戳
-
-```sql
--- 触发器函数
-CREATE OR REPLACE FUNCTION public.update_updated_at_column()
-RETURNS TRIGGER AS $$
-BEGIN
- NEW.updated_at = NOW();
- RETURN NEW;
-END;
-$$ LANGUAGE plpgsql;
-
--- 应用到表
-CREATE TRIGGER trigger_ml_user_profiles_updated_at
- BEFORE UPDATE ON public.ml_user_profiles
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
-```
-
-#### 2.3.2 确保唯一默认地址
-
-```sql
-CREATE OR REPLACE FUNCTION public.ensure_single_default_address()
-RETURNS TRIGGER AS $$
-BEGIN
- IF NEW.is_default = TRUE THEN
- UPDATE public.ml_user_addresses
- SET is_default = FALSE
- WHERE user_id = NEW.user_id AND id != NEW.id;
- END IF;
- RETURN NEW;
-END;
-$$ LANGUAGE plpgsql;
-
-CREATE TRIGGER trigger_ensure_single_default_address
- BEFORE INSERT OR UPDATE ON public.ml_user_addresses
- FOR EACH ROW EXECUTE FUNCTION public.ensure_single_default_address();
-```
-
-#### 2.3.3 自动更新商品库存
-
-```sql
-CREATE OR REPLACE FUNCTION public.update_product_stock()
-RETURNS TRIGGER AS $$
-BEGIN
- IF TG_OP = 'INSERT' THEN
- -- 插入订单商品时,减少库存
- UPDATE public.ml_products
- SET available_stock = available_stock - NEW.quantity
- WHERE id = NEW.product_id;
- ELSIF TG_OP = 'DELETE' THEN
- -- 删除订单商品时,恢复库存
- UPDATE public.ml_products
- SET available_stock = available_stock + OLD.quantity
- WHERE id = OLD.product_id;
- END IF;
- RETURN NULL;
-END;
-$$ LANGUAGE plpgsql;
-
-CREATE TRIGGER trigger_update_product_stock
- AFTER INSERT OR DELETE ON public.ml_order_items
- FOR EACH ROW EXECUTE FUNCTION public.update_product_stock();
-```
-
-### 2.4 数据库函数实现
-
-#### 2.4.1 业务函数
-
-**生成订单号**
-```sql
-CREATE OR REPLACE FUNCTION public.generate_order_no()
-RETURNS TEXT AS $$
-DECLARE
- order_no TEXT;
-BEGIN
- order_no := 'ML' || TO_CHAR(NOW(), 'YYYYMMDD') ||
- LPAD(NEXTVAL('ml_order_seq')::TEXT, 6, '0');
- RETURN order_no;
-END;
-$$ LANGUAGE plpgsql;
-```
-
-**计算购物车总金额**
-```sql
-CREATE OR REPLACE FUNCTION public.calculate_cart_total(p_user_id UUID)
-RETURNS DECIMAL AS $$
-DECLARE
- total_amount DECIMAL(12,2) := 0;
-BEGIN
- SELECT COALESCE(SUM(
- CASE
- WHEN c.sku_id IS NOT NULL THEN s.price * c.quantity
- ELSE p.base_price * c.quantity
- END
- ), 0) INTO total_amount
- FROM public.ml_shopping_cart c
- LEFT JOIN public.ml_product_skus s ON c.sku_id = s.id
- LEFT JOIN public.ml_products p ON c.product_id = p.id
- WHERE c.user_id = p_user_id
- AND c.selected = TRUE
- AND p.status = 1
- AND (s.id IS NULL OR s.status = 1);
-
- RETURN total_amount;
-END;
-$$ LANGUAGE plpgsql;
-```
-
-**获取用户默认地址**
-```sql
-CREATE OR REPLACE FUNCTION public.get_user_default_address(p_user_id UUID)
-RETURNS TABLE (
- id UUID,
- receiver_name VARCHAR,
- receiver_phone VARCHAR,
- address_detail TEXT
-) AS $$
-BEGIN
- RETURN QUERY
- SELECT
- a.id,
- a.receiver_name,
- a.receiver_phone,
- a.address_detail
- FROM public.ml_user_addresses a
- WHERE a.user_id = p_user_id
- AND a.is_default = TRUE
- AND a.status = 1
- LIMIT 1;
-END;
-$$ LANGUAGE plpgsql;
-```
-
-### 2.5 RLS 行级安全策略
-
-#### 2.5.1 用户数据隔离
-
-```sql
--- 用户只能访问自己的数据
-CREATE POLICY ml_user_profiles_select_policy ON public.ml_user_profiles
- FOR SELECT USING (
- auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_user_profiles_update_policy ON public.ml_user_profiles
- FOR UPDATE USING (
- auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = user_id)
- );
-```
-
-#### 2.5.2 商品权限控制
-
-```sql
--- 所有人可查看已上架商品
-CREATE POLICY ml_products_select_policy ON public.ml_products
- FOR SELECT USING (status = 1);
-
--- 商家只能管理自己的商品
-CREATE POLICY ml_products_insert_policy ON public.ml_products
- FOR INSERT WITH CHECK (
- auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = merchant_id)
- );
-
-CREATE POLICY ml_products_update_policy ON public.ml_products
- FOR UPDATE USING (
- auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = merchant_id)
- );
-```
-
-#### 2.5.3 订单权限控制
-
-```sql
--- 用户和商家都可查看相关订单
-CREATE POLICY ml_orders_select_policy ON public.ml_orders
- FOR SELECT USING (
- auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = user_id)
- OR
- auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = merchant_id)
- );
-
--- 只有用户能创建订单
-CREATE POLICY ml_orders_insert_policy ON public.ml_orders
- FOR INSERT WITH CHECK (
- auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = user_id)
- );
-```
-
----
-
-## 三、后端/API层实现
-
-### 3.1 PostgREST 自动生成 API
-
-#### 3.1.1 REST API 自动生成机制
-
-Supabase 基于 PostgREST 自动为每个表生成 REST API:
-
-**查询 API**
-```
-GET /rest/v1/ml_products
-GET /rest/v1/ml_products?id=eq.{uuid}
-GET /rest/v1/ml_products?status=eq.1&limit=20
-GET /rest/v1/ml_products?base_price=gte.100&base_price=lte.500
-```
-
-**插入 API**
-```
-POST /rest/v1/ml_orders
-Content-Type: application/json
-{
- "user_id": "uuid",
- "merchant_id": "uuid",
- "total_amount": 100.00
-}
-```
-
-**更新 API**
-```
-PATCH /rest/v1/ml_products?id=eq.{uuid}
-Content-Type: application/json
-{
- "status": 2
-}
-```
-
-**删除 API**
-```
-DELETE /rest/v1/ml_user_favorites?id=eq.{uuid}
-```
-
-**RPC 函数调用**
-```
-POST /rest/v1/rpc/calculate_cart_total
-Content-Type: application/json
-{
- "p_user_id": "uuid"
-}
-```
-
-### 3.2 查询操作符支持
-
-PostgREST 支持丰富的查询操作符:
-
-```typescript
-// 等于
-?status=eq.1
-
-// 不等于
-?status=neq.2
-
-// 大于/小于
-?base_price=gte.100&base_price=lte.500
-
-// 模糊查询
-?name=ilike.%商品%
-
-// IN 查询
-?category_id=in.(id1,id2,id3)
-
-// IS NULL
-?deleted_at=is.null
-
-// JSONB 查询
-?preferences->theme=eq.dark
-```
-
-### 3.3 分页和排序
-
-```typescript
-// 分页
-?limit=20&offset=0
-// 或使用 Range 头
-Range: 0-19
-
-// 排序
-?order=created_at.desc
-?order=base_price.asc,created_at.desc
-
-// 计数
-Prefer: count=exact
-```
-
----
-
-## 四、前端实现
-
-### 4.1 项目结构
-
-```
-pages/mall/
-├── consumer/ # 消费者端
-│ ├── index.uvue # 首页
-│ ├── product-detail.uvue # 商品详情
-│ ├── cart.uvue # 购物车
-│ ├── checkout.uvue # 结算页
-│ ├── orders.uvue # 订单列表
-│ └── subscription/ # 订阅相关
-├── merchant/ # 商家端
-│ ├── index.uvue # 商家首页
-│ └── product-detail.uvue
-├── delivery/ # 配送端
-├── admin/ # 管理端
-└── service/ # 客服端
-
-components/supadb/
-├── aksupa.uts # Supabase 客户端封装
-├── aksupainstance.uts # 全局单例
-└── aksuparealtime.uts # 实时订阅
-
-types/
-└── mall-types.uts # 类型定义
-```
-
-### 4.2 Supabase 客户端封装
-
-#### 4.2.1 客户端初始化
-
-**文件**: `components/supadb/aksupainstance.uts`
-
-```typescript
-import AkSupa from './aksupa.uts'
-import { SUPA_URL, SUPA_KEY } from '@/ak/config.uts'
-
-// 创建全局 Supabase 客户端实例
-const supa = new AkSupa(SUPA_URL, SUPA_KEY)
-
-// 自动登录 (开发环境)
-const supaReady: Promise = (async () => {
- try {
- await supa.signIn('test@example.com', 'password')
- return true
- } catch (err) {
- console.error('Supabase auto sign-in failed', err)
- return false
- }
-})()
-
-export { supaReady }
-export default supa
-```
-
-#### 4.2.2 API 调用封装
-
-**文件**: `components/supadb/aksupa.uts`
-
-```typescript
-export class AkSupa {
- baseUrl: string
- apikey: string
-
- constructor(baseUrl: string, apikey: string) {
- this.baseUrl = baseUrl
- this.apikey = apikey
- }
-
- // 查询数据
- async select(
- table: string,
- filter?: string | null,
- options?: AkSupaSelectOptions
- ): Promise> {
- let url = this.baseUrl + '/rest/v1/' + table
- let headers = {
- apikey: this.apikey,
- 'Content-Type': 'application/json',
- Authorization: `Bearer ${AkReq.getToken() ?? ''}`
- } as UTSJSONObject
-
- // 构建查询参数
- let params: string[] = []
- if (options?.limit) params.push(`limit=${options.limit}`)
- if (options?.order) params.push(`order=${encodeURIComponent(options.order)}`)
- if (filter) params.push(filter)
-
- if (params.length > 0) {
- url += '?' + params.join('&')
- }
-
- return await this.requestWithAutoRefresh({
- url,
- method: 'GET',
- headers
- })
- }
-
- // 插入数据
- async insert(
- table: string,
- row: UTSJSONObject | Array