diff --git a/pages/user/coupon.vue b/pages/user/coupon.vue
index d9465ae..26e39a5 100644
--- a/pages/user/coupon.vue
+++ b/pages/user/coupon.vue
@@ -1,492 +1,341 @@
-
-
-
- {{item.name}}
-
-
+
-
-
-
-
-
-
-
- 1
- 张
-
-
- ¥
- {{item.discountAmount || 0}}
-
-
+
+
+
+
+
+
+ {{ item.title }}
-
- {{ item.type == 2 ? item.name : '优惠券(元)'}}
+
+ 有效期至:{{ item.startTime }}-{{ item.endTime }}
-
-
-
-
-
- {{ item.shopName }}
-
- 无门槛使用
-
-
- {{ item.type == 2 ? '会员商品券' : item.name}}
-
- {{fromInfo.status == 0 ? '去使用':'已使用'}}
-
-
-
- 有效期至:{{$u.timeFormat(item.endTime, 'yyyy/mm/dd') || '0'}}
-
-
+
+ 去使用
-
-
-
+
+
+ {{ item.remark }}
+
+
+ 查看详情
+
-
+
+
+
+
-
+
\ No newline at end of file
+}
+.list-wrap {
+ padding-top: 28upx;
+ .item {
+ border-radius: 18upx;
+ background-color: #fff;
+ padding: 28upx;
+ .top {
+ display: flex;
+ align-items: center;
+ padding-bottom: 28upx;
+ .icon {
+ $size: 120upx;
+ width: $size;
+ height: $size;
+ background-color: #f7f7f7;
+ border-radius: 12upx;
+ }
+ .info {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ gap: 8upx;
+ padding-left: 28upx;
+ .view {
+ flex: 1;
+ &.name {
+ font-size: 32upx;
+ color: #333;
+ }
+ &.time {
+ .t {
+ font-size: 24upx;
+ color: #999;
+ }
+ }
+ }
+ }
+ .btn {
+ width: 120upx;
+ height: 48upx;
+ border-radius: 48upx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background-color: #333;
+ .t {
+ font-size: 24upx;
+ color: #fff;
+ }
+ }
+ }
+ .btm {
+ display: flex;
+ align-items: center;
+ padding: 28upx 0 14upx;
+ border-top: 1upx solid #f7f7f7;
+ .left {
+ flex: 1;
+ height: 40upx;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ .t {
+ font-size: 24upx;
+ color: #999;
+ }
+ }
+ .right {
+ display: flex;
+ align-items: center;
+ padding-left: 28upx;
+ .t {
+ font-size: 24upx;
+ color: #333;
+ }
+ }
+ }
+ }
+}
+.shoplist-popup {
+ padding: 0 28upx 28upx;
+ .title {
+ padding: 28upx 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ .t {
+ font-size: 32upx;
+ font-weight: bold;
+ color: #333;
+ }
+ }
+ .popup-list {
+ height: 50vh;
+ .item {
+ height: 100upx;
+ border-radius: 12upx;
+ background-color: #f7f7f7;
+ margin-bottom: 28upx;
+ display: flex;
+ align-items: center;
+ padding: 28upx;
+ .t {
+ font-size: 28upx;
+ color: #555;
+ }
+ }
+ }
+}
+
diff --git a/pages/user/coupon_back.vue b/pages/user/coupon_back.vue
new file mode 100644
index 0000000..d9465ae
--- /dev/null
+++ b/pages/user/coupon_back.vue
@@ -0,0 +1,492 @@
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+ 张
+
+
+ ¥
+ {{item.discountAmount || 0}}
+
+
+
+
+ {{ item.type == 2 ? item.name : '优惠券(元)'}}
+
+
+
+
+
+
+
+ {{ item.shopName }}
+
+ 无门槛使用
+
+
+ {{ item.type == 2 ? '会员商品券' : item.name}}
+
+ {{fromInfo.status == 0 ? '去使用':'已使用'}}
+
+
+
+ 有效期至:{{$u.timeFormat(item.endTime, 'yyyy/mm/dd') || '0'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..7b4c495
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,256 @@
+lockfileVersion: '6.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+dependencies:
+ '@dcloudio/uni-app':
+ specifier: ^2.0.2-4040520250103001
+ version: 2.0.2-4070620250821001(@dcloudio/types@3.4.21)(@vue/composition-api@1.7.2)
+ dayjs:
+ specifier: ^1.11.13
+ version: 1.11.18
+ jsbarcode:
+ specifier: ^3.11.6
+ version: 3.12.1
+ pinia:
+ specifier: ^2.3.1
+ version: 2.3.1(@vue/composition-api@1.7.2)(vue@3.5.21)
+ pinia-plugin-unistorage:
+ specifier: ^0.1.2
+ version: 0.1.2
+
+packages:
+
+ /@babel/helper-string-parser@7.27.1:
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+ engines: {node: '>=6.9.0'}
+ dev: false
+
+ /@babel/helper-validator-identifier@7.27.1:
+ resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
+ engines: {node: '>=6.9.0'}
+ dev: false
+
+ /@babel/parser@7.28.4:
+ resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+ dependencies:
+ '@babel/types': 7.28.4
+ dev: false
+
+ /@babel/types@7.28.4:
+ resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.27.1
+ dev: false
+
+ /@dcloudio/types@3.4.21:
+ resolution: {integrity: sha512-rsv3XfAaD/dtuVboPeYh+vPcULnWyozGaGKHWyN0dYRm7L1uypFUM30qNYMj9iNmbAENuBjV177S1gNEBIvdDA==}
+ dev: false
+
+ /@dcloudio/uni-app@2.0.2-4070620250821001(@dcloudio/types@3.4.21)(@vue/composition-api@1.7.2):
+ resolution: {integrity: sha512-kZBLLRmFsF3HvqfgTKHh1NDb1G7L5jJXZ3rncrGnaIirc6mE4jpBoSeqQY5jFxgQXFdJVXsHvLezBi13XiqazA==}
+ peerDependencies:
+ '@dcloudio/types': ^3.0.15
+ '@vue/composition-api': ^1.7.0
+ dependencies:
+ '@dcloudio/types': 3.4.21
+ '@vue/composition-api': 1.7.2(vue@3.5.21)
+ dev: false
+
+ /@jridgewell/sourcemap-codec@1.5.5:
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+ dev: false
+
+ /@vue/compiler-core@3.5.21:
+ resolution: {integrity: sha512-8i+LZ0vf6ZgII5Z9XmUvrCyEzocvWT+TeR2VBUVlzIH6Tyv57E20mPZ1bCS+tbejgUgmjrEh7q/0F0bibskAmw==}
+ dependencies:
+ '@babel/parser': 7.28.4
+ '@vue/shared': 3.5.21
+ entities: 4.5.0
+ estree-walker: 2.0.2
+ source-map-js: 1.2.1
+ dev: false
+
+ /@vue/compiler-dom@3.5.21:
+ resolution: {integrity: sha512-jNtbu/u97wiyEBJlJ9kmdw7tAr5Vy0Aj5CgQmo+6pxWNQhXZDPsRr1UWPN4v3Zf82s2H3kF51IbzZ4jMWAgPlQ==}
+ dependencies:
+ '@vue/compiler-core': 3.5.21
+ '@vue/shared': 3.5.21
+ dev: false
+
+ /@vue/compiler-sfc@3.5.21:
+ resolution: {integrity: sha512-SXlyk6I5eUGBd2v8Ie7tF6ADHE9kCR6mBEuPyH1nUZ0h6Xx6nZI29i12sJKQmzbDyr2tUHMhhTt51Z6blbkTTQ==}
+ dependencies:
+ '@babel/parser': 7.28.4
+ '@vue/compiler-core': 3.5.21
+ '@vue/compiler-dom': 3.5.21
+ '@vue/compiler-ssr': 3.5.21
+ '@vue/shared': 3.5.21
+ estree-walker: 2.0.2
+ magic-string: 0.30.19
+ postcss: 8.5.6
+ source-map-js: 1.2.1
+ dev: false
+
+ /@vue/compiler-ssr@3.5.21:
+ resolution: {integrity: sha512-vKQ5olH5edFZdf5ZrlEgSO1j1DMA4u23TVK5XR1uMhvwnYvVdDF0nHXJUblL/GvzlShQbjhZZ2uvYmDlAbgo9w==}
+ dependencies:
+ '@vue/compiler-dom': 3.5.21
+ '@vue/shared': 3.5.21
+ dev: false
+
+ /@vue/composition-api@1.7.2(vue@3.5.21):
+ resolution: {integrity: sha512-M8jm9J/laYrYT02665HkZ5l2fWTK4dcVg3BsDHm/pfz+MjDYwX+9FUaZyGwEyXEDonQYRCo0H7aLgdklcIELjw==}
+ peerDependencies:
+ vue: '>= 2.5 < 2.7'
+ dependencies:
+ vue: 3.5.21
+ dev: false
+
+ /@vue/devtools-api@6.6.4:
+ resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
+ dev: false
+
+ /@vue/reactivity@3.5.21:
+ resolution: {integrity: sha512-3ah7sa+Cwr9iiYEERt9JfZKPw4A2UlbY8RbbnH2mGCE8NwHkhmlZt2VsH0oDA3P08X3jJd29ohBDtX+TbD9AsA==}
+ dependencies:
+ '@vue/shared': 3.5.21
+ dev: false
+
+ /@vue/runtime-core@3.5.21:
+ resolution: {integrity: sha512-+DplQlRS4MXfIf9gfD1BOJpk5RSyGgGXD/R+cumhe8jdjUcq/qlxDawQlSI8hCKupBlvM+3eS1se5xW+SuNAwA==}
+ dependencies:
+ '@vue/reactivity': 3.5.21
+ '@vue/shared': 3.5.21
+ dev: false
+
+ /@vue/runtime-dom@3.5.21:
+ resolution: {integrity: sha512-3M2DZsOFwM5qI15wrMmNF5RJe1+ARijt2HM3TbzBbPSuBHOQpoidE+Pa+XEaVN+czbHf81ETRoG1ltztP2em8w==}
+ dependencies:
+ '@vue/reactivity': 3.5.21
+ '@vue/runtime-core': 3.5.21
+ '@vue/shared': 3.5.21
+ csstype: 3.1.3
+ dev: false
+
+ /@vue/server-renderer@3.5.21(vue@3.5.21):
+ resolution: {integrity: sha512-qr8AqgD3DJPJcGvLcJKQo2tAc8OnXRcfxhOJCPF+fcfn5bBGz7VCcO7t+qETOPxpWK1mgysXvVT/j+xWaHeMWA==}
+ peerDependencies:
+ vue: 3.5.21
+ dependencies:
+ '@vue/compiler-ssr': 3.5.21
+ '@vue/shared': 3.5.21
+ vue: 3.5.21
+ dev: false
+
+ /@vue/shared@3.5.21:
+ resolution: {integrity: sha512-+2k1EQpnYuVuu3N7atWyG3/xoFWIVJZq4Mz8XNOdScFI0etES75fbny/oU4lKWk/577P1zmg0ioYvpGEDZ3DLw==}
+ dev: false
+
+ /csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+ dev: false
+
+ /dayjs@1.11.18:
+ resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==}
+ dev: false
+
+ /entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+ dev: false
+
+ /estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+ dev: false
+
+ /jsbarcode@3.12.1:
+ resolution: {integrity: sha512-QZQSqIknC2Rr/YOUyOkCBqsoiBAOTYK+7yNN3JsqfoUtJtkazxNw1dmPpxuv7VVvqW13kA3/mKiLq+s/e3o9hQ==}
+ dev: false
+
+ /magic-string@0.30.19:
+ resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==}
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ dev: false
+
+ /nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+ dev: false
+
+ /picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+ dev: false
+
+ /pinia-plugin-unistorage@0.1.2:
+ resolution: {integrity: sha512-WXit2cGnm5rG6CDTcLSLehNWhyJS/Yq7WEeeXAapZbCnqoPJxlszqg7rT8S+OP47az0h5nlajGo+LuyMxUQ2uw==}
+ dev: false
+
+ /pinia@2.3.1(@vue/composition-api@1.7.2)(vue@3.5.21):
+ resolution: {integrity: sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==}
+ peerDependencies:
+ typescript: '>=4.4.4'
+ vue: ^2.7.0 || ^3.5.11
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@vue/devtools-api': 6.6.4
+ vue: 3.5.21
+ vue-demi: 0.14.10(@vue/composition-api@1.7.2)(vue@3.5.21)
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ dev: false
+
+ /postcss@8.5.6:
+ resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
+ engines: {node: ^10 || ^12 || >=14}
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+ dev: false
+
+ /source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /vue-demi@0.14.10(@vue/composition-api@1.7.2)(vue@3.5.21):
+ resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+ dependencies:
+ '@vue/composition-api': 1.7.2(vue@3.5.21)
+ vue: 3.5.21
+ dev: false
+
+ /vue@3.5.21:
+ resolution: {integrity: sha512-xxf9rum9KtOdwdRkiApWL+9hZEMWE90FHh8yS1+KJAiWYh+iGWV1FquPjoO9VUHQ+VIhsCXNNyZ5Sf4++RVZBA==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@vue/compiler-dom': 3.5.21
+ '@vue/compiler-sfc': 3.5.21
+ '@vue/runtime-dom': 3.5.21
+ '@vue/server-renderer': 3.5.21(vue@3.5.21)
+ '@vue/shared': 3.5.21
+ dev: false