koishi-plugin-rocom 1.0.11 → 1.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/lib/client.d.ts +17 -1
  2. package/lib/client.js +121 -21
  3. package/lib/commands/merchant.js +409 -61
  4. package/lib/commands/query.js +95 -27
  5. package/lib/index.d.ts +4 -0
  6. package/lib/index.js +600 -127
  7. package/lib/render-templates/home/img/rocomuid/a_title.png +0 -0
  8. package/lib/render-templates/home/img/rocomuid/banner_bg.png +0 -0
  9. package/lib/render-templates/home/img/rocomuid/bg.jpg +0 -0
  10. package/lib/render-templates/home/img/rocomuid/img_head.png +0 -0
  11. package/lib/render-templates/home/img/rocomuid/jindu_bar.png +0 -0
  12. package/lib/render-templates/home/img/rocomuid/jindu_tc.png +0 -0
  13. package/lib/render-templates/home/img/rocomuid/level_icon.png +0 -0
  14. package/lib/render-templates/home/img/rocomuid/pet_bg.png +0 -0
  15. package/lib/render-templates/home/img/rocomuid/plant_bg.png +0 -0
  16. package/lib/render-templates/home/img/rocomuid/star_1.png +0 -0
  17. package/lib/render-templates/home/img/rocomuid/star_8.png +0 -0
  18. package/lib/render-templates/home/img/rocomuid/star_9.png +0 -0
  19. package/lib/render-templates/home/img/rocomuid/title_fg.png +0 -0
  20. package/lib/render-templates/home/img/rocomuid/top_bg.png +0 -0
  21. package/lib/render-templates/home/img/rocomuid/touxiang_mask.png +0 -0
  22. package/lib/render-templates/home/index.html +81 -97
  23. package/lib/render-templates/home/style.css +316 -375
  24. package/lib/render-templates/yuanxing-shangren/CHANGELOG.md +138 -0
  25. package/lib/render-templates/yuanxing-shangren/README.md +86 -0
  26. package/lib/render-templates/yuanxing-shangren/img/coin.png +0 -0
  27. package/lib/render-templates/yuanxing-shangren/img//345/272/225/351/203/250/344/277/241/346/201/257/346/241/206.png +0 -0
  28. package/lib/render-templates/yuanxing-shangren/img//346/240/207/351/242/230.png +0 -0
  29. package/lib/render-templates/yuanxing-shangren/img//347/203/255/351/224/200.png +0 -0
  30. package/lib/render-templates/yuanxing-shangren/img//347/274/226/345/217/267/350/203/214/346/231/257/346/241/206.png +0 -0
  31. package/lib/render-templates/yuanxing-shangren/index.html +233 -148
  32. package/lib/render-templates/yuanxing-shangren/index.html.backup +356 -0
  33. package/lib/render-templates/yuanxing-shangren/merchant.html +461 -0
  34. package/lib/render-templates/yuanxing-shangren/style.css +201 -256
  35. package/lib/render-templates/yuanxing-shangren/today.html +461 -0
  36. package/lib/render-templates/yuanxing-shangren/today.style.css +366 -0
  37. package/lib/render.js +11 -4
  38. package/lib/subscription-send.js +4 -5
  39. package/lib/ttf/rocom_skill_origin.ttf +0 -0
  40. package/lib/ttf//351/200/240/345/255/227/345/267/245/346/210/277/345/220/257/351/273/221/344/275/223.ttf +0 -0
  41. package/lib/types.d.ts +4 -0
  42. package/package.json +1 -1
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>远行商人</title>
6
+ <title>今日远行商人</title>
7
7
  <style>
8
8
  @font-face {
9
9
  font-family: "fzlant";
@@ -31,6 +31,19 @@
31
31
  --card-bg: rgba(255, 252, 247, 0.82);
32
32
  --tag-bg: rgba(255, 214, 153, 0.4);
33
33
  --tag-text: #9a5f19;
34
+ --round-current-bg: rgba(255, 214, 153, 0.25);
35
+ --round-current-border: rgba(200, 140, 40, 0.4);
36
+ --round-current-text: #b06800;
37
+ --accent-color: #a0631d;
38
+ --warning-color: #bf5f3f;
39
+ --border-color: rgba(179, 123, 45, 0.2);
40
+ --border-color-light: rgba(118, 97, 74, 0.12);
41
+ --weekend-color: #c04030;
42
+ --normal-color: #2a8040;
43
+ --round-color: #2a60b0;
44
+ --weekend-bg: rgba(220, 80, 60, 0.15);
45
+ --normal-bg: rgba(60, 160, 80, 0.15);
46
+ --round-bg: rgba(60, 120, 220, 0.15);
34
47
  }
35
48
 
36
49
  html,
@@ -44,10 +57,12 @@ body {
44
57
 
45
58
  .merchant-page {
46
59
  position: relative;
47
- width: min(1280px, 100%);
60
+ width: min(1040px, calc(100vw - 24px));
48
61
  margin: 0 auto;
62
+ padding: 14px;
49
63
  overflow: hidden;
50
64
  background: #ece3d3;
65
+ border-radius: 30px;
51
66
  }
52
67
 
53
68
  .background {
@@ -64,14 +79,14 @@ body {
64
79
  position: relative;
65
80
  z-index: 1;
66
81
  width: 100%;
67
- padding: 18px 18px 24px;
82
+ padding: 2px 0 4px;
68
83
  }
69
84
 
70
85
  .header {
71
86
  display: flex;
72
87
  justify-content: space-between;
73
- gap: 20px;
74
- padding: 22px 24px;
88
+ gap: 16px;
89
+ padding: 20px 22px;
75
90
  border: 1px solid var(--line);
76
91
  border-radius: 24px;
77
92
  background: linear-gradient(135deg, rgba(255,255,255,0.86), rgba(245,236,221,0.9));
@@ -87,111 +102,176 @@ body {
87
102
  .title-main {
88
103
  display: flex;
89
104
  align-items: center;
90
- gap: 14px;
105
+ gap: 12px;
91
106
  }
92
107
 
93
108
  .title-badge {
94
- width: 56px;
95
- height: 56px;
109
+ width: 60px;
110
+ height: 60px;
96
111
  display: flex;
97
112
  align-items: center;
98
113
  justify-content: center;
99
114
  background: transparent;
100
115
  color: #fffaf0;
101
- font-size: 32px;
116
+ font-size: 28px;
102
117
  font-weight: 900;
103
118
  }
104
119
 
105
120
  .title-badge img {
106
- width: 56px;
107
- height: 56px;
121
+ width: 60px;
122
+ height: 60px;
108
123
  object-fit: contain;
109
124
  }
110
125
 
111
126
  .title-text {
112
127
  font-family: var(--font-family-accent);
113
- font-size: 42px;
128
+ font-size: 36px;
114
129
  font-weight: 900;
115
- letter-spacing: 2px;
130
+ letter-spacing: 1px;
116
131
  }
117
132
 
118
133
  .subtitle {
119
134
  color: var(--text-2);
120
- font-size: 18px;
135
+ font-size: 16px;
121
136
  }
122
137
 
123
138
  .header-side {
124
- min-width: 320px;
139
+ min-width: 200px;
125
140
  display: flex;
126
141
  flex-direction: column;
127
142
  align-items: flex-end;
128
143
  justify-content: center;
129
- gap: 14px;
144
+ gap: 12px;
130
145
  }
131
146
 
132
147
  .summary-chip {
133
- padding: 10px 16px;
148
+ padding: 9px 14px;
134
149
  border-radius: 999px;
135
150
  background: rgba(255,255,255,0.72);
136
- border: 1px solid rgba(179, 123, 45, 0.2);
151
+ border: 1px solid var(--border-color);
137
152
  color: var(--text-2);
138
- font-size: 18px;
153
+ font-size: 16px;
139
154
  }
140
155
 
141
156
  .summary-chip strong {
142
157
  font-family: var(--font-family-accent);
143
- color: #a0631d;
144
- font-size: 28px;
158
+ color: var(--accent-color);
159
+ font-size: 24px;
145
160
  margin-left: 8px;
146
161
  }
147
162
 
148
- .round-info {
163
+ .category-section {
164
+ margin-top: 18px;
165
+ }
166
+
167
+ .category-header {
149
168
  display: flex;
150
169
  align-items: center;
151
170
  gap: 12px;
152
- flex-wrap: wrap;
153
- justify-content: flex-end;
171
+ margin-bottom: 12px;
172
+ padding: 0 4px;
154
173
  }
155
174
 
156
- .round-pill,
157
- .countdown-pill {
158
- padding: 8px 14px;
175
+ .category-title {
176
+ font-family: var(--font-family-accent);
177
+ font-size: 24px;
178
+ font-weight: 800;
179
+ color: var(--text-1);
180
+ }
181
+
182
+ .category-count {
183
+ padding: 4px 10px;
159
184
  border-radius: 999px;
160
- background: rgba(255,255,255,0.78);
161
- border: 1px solid var(--line);
162
- font-size: 17px;
185
+ font-size: 14px;
186
+ font-weight: 700;
187
+ }
188
+
189
+ .category-count.normal {
190
+ background: var(--normal-bg);
191
+ color: var(--normal-color);
192
+ }
193
+
194
+ .category-count.round {
195
+ background: var(--round-bg);
196
+ color: var(--round-color);
197
+ }
198
+
199
+ .category-count.weekend {
200
+ background: var(--weekend-bg);
201
+ color: var(--weekend-color);
202
+ }
203
+
204
+ .round-section {
205
+ padding: 14px 18px;
206
+ border: 1px solid var(--round-current-border);
207
+ border-radius: 16px;
208
+ background: linear-gradient(135deg, rgba(255,248,235,0.88), rgba(255,240,210,0.9));
209
+ box-shadow: 0 6px 22px rgba(180, 120, 20, 0.08);
210
+ margin-bottom: 10px;
211
+ }
212
+
213
+ .round-section:last-child {
214
+ margin-bottom: 0;
215
+ }
216
+
217
+ .round-section.is-current {
218
+ background: linear-gradient(135deg, rgba(255,248,235,1), rgba(255,240,210,1));
219
+ border-color: rgba(200, 140, 40, 0.6);
220
+ box-shadow: 0 6px 28px rgba(180, 120, 20, 0.12);
221
+ }
222
+
223
+ .round-header {
224
+ display: flex;
225
+ align-items: center;
226
+ gap: 10px;
227
+ margin-bottom: 10px;
228
+ }
229
+
230
+ .round-title {
231
+ font-family: var(--font-family-accent);
232
+ font-size: 18px;
233
+ font-weight: 700;
234
+ color: var(--text-2);
163
235
  }
164
236
 
165
- .countdown-pill {
166
- color: #bf5f3f;
237
+ .round-badge {
238
+ padding: 3px 8px;
239
+ border-radius: 999px;
240
+ background: var(--tag-bg);
241
+ color: var(--tag-text);
242
+ font-size: 12px;
167
243
  font-weight: 700;
168
244
  }
169
245
 
246
+ .round-badge.current {
247
+ background: var(--round-current-bg);
248
+ color: var(--round-current-text);
249
+ }
250
+
170
251
  .products-grid {
171
252
  display: grid;
172
253
  grid-template-columns: 1fr;
173
- gap: 16px;
174
- margin-top: 18px;
254
+ gap: 14px;
175
255
  }
176
256
 
177
257
  .product-card {
178
258
  display: grid;
179
- grid-template-columns: 120px 1fr auto;
180
- gap: 18px;
259
+ grid-template-columns: 80px 1fr auto;
260
+ gap: 14px;
181
261
  align-items: center;
182
- min-height: 148px;
183
- padding: 18px 28px;
184
- border: 1px solid rgba(118, 97, 74, 0.14);
185
- border-radius: 22px;
186
- background: linear-gradient(135deg, rgba(255,255,255,0.72), rgba(244,236,224,0.88));
187
- box-shadow: 0 10px 26px rgba(58, 39, 21, 0.06);
262
+ min-height: 96px;
263
+ padding: 12px 16px;
264
+ border: 1px solid rgba(200, 140, 40, 0.3);
265
+ border-radius: 16px;
266
+ background: linear-gradient(135deg, rgba(255,248,235,0.75), rgba(255,240,210,0.85));
267
+ box-shadow: 0 4px 14px rgba(180, 120, 20, 0.06);
188
268
  }
189
269
 
190
270
  .product-image-container {
191
- width: 120px;
192
- height: 120px;
193
- border-radius: 50%;
194
- background: radial-gradient(circle at 30% 30%, rgba(255,255,255,0.94), rgba(239,228,210,0.92));
271
+ width: 80px;
272
+ height: 80px;
273
+ border-radius: 12px;
274
+ background: radial-gradient(circle at 30% 30%, rgba(255,255,255,0.94), rgba(255,240,210,0.92));
195
275
  display: flex;
196
276
  align-items: center;
197
277
  justify-content: center;
@@ -210,26 +290,20 @@ body {
210
290
 
211
291
  .product-name {
212
292
  font-family: var(--font-family-accent);
213
- font-size: 34px;
293
+ font-size: 22px;
214
294
  font-weight: 800;
215
295
  line-height: 1.2;
216
296
  word-break: break-word;
217
297
  }
218
298
 
219
- .product-sub {
220
- margin-top: 10px;
221
- color: var(--text-2);
222
- font-size: 18px;
223
- }
224
-
225
299
  .product-time {
226
300
  display: inline-flex;
227
- margin-top: 14px;
228
- padding: 8px 14px;
301
+ margin-top: 8px;
302
+ padding: 5px 10px;
229
303
  border-radius: 999px;
230
304
  background: var(--tag-bg);
231
305
  color: var(--tag-text);
232
- font-size: 16px;
306
+ font-size: 14px;
233
307
  font-weight: 700;
234
308
  }
235
309
 
@@ -241,130 +315,141 @@ body {
241
315
  }
242
316
 
243
317
  .product-slot {
244
- padding: 10px 14px;
245
- border-radius: 16px;
318
+ padding: 7px 10px;
319
+ border-radius: 12px;
246
320
  background: rgba(255,255,255,0.72);
247
- border: 1px solid rgba(179, 123, 45, 0.18);
248
- color: #8b5e2b;
249
- font-size: 18px;
321
+ border: 1px solid var(--border-color);
322
+ color: var(--accent-color);
323
+ font-size: 14px;
250
324
  font-weight: 700;
251
325
  }
252
326
 
253
- .product-empty {
327
+ .round-empty {
328
+ text-align: center;
329
+ padding: 18px 14px;
330
+ border-radius: 14px;
331
+ border: 1px dashed rgba(200, 140, 40, 0.3);
332
+ color: #8b7a66;
333
+ font-size: 16px;
334
+ background: rgba(255,248,235,0.5);
335
+ }
336
+
337
+ .all-empty {
254
338
  text-align: center;
255
- padding: 30px 18px;
256
- border-radius: 22px;
257
- border: 1px dashed rgba(120, 102, 81, 0.35);
339
+ padding: 40px 18px;
340
+ margin-top: 18px;
341
+ border-radius: 20px;
342
+ border: 1px dashed rgba(200, 140, 40, 0.35);
258
343
  color: #5c4a37;
259
- font-size: 22px;
260
- background: rgba(255,255,255,0.52);
261
- }
262
-
263
- @media (max-width: 760px) {
264
- .merchant-page {
265
- width: 100%;
266
- }
267
-
268
- .content-container {
269
- padding: 10px 10px 14px;
270
- }
271
-
272
- .header {
273
- flex-direction: column;
274
- gap: 10px;
275
- padding: 14px 16px;
276
- }
277
-
278
- .header-side {
279
- min-width: 0;
280
- align-items: flex-start;
281
- }
282
-
283
- .round-info {
284
- justify-content: flex-start;
285
- }
286
-
287
- .title-badge,
288
- .title-badge img {
289
- width: 48px;
290
- height: 48px;
291
- }
292
-
293
- .title-text {
294
- font-size: 30px;
295
- }
296
-
297
- .product-card {
298
- grid-template-columns: 80px 1fr;
299
- min-height: 0;
300
- padding: 12px 14px;
301
- }
302
-
303
- .product-image-container {
304
- width: 80px;
305
- height: 80px;
306
- }
307
-
308
- .product-name {
309
- font-size: 24px;
310
- }
311
-
312
- .product-side {
313
- grid-column: 1 / -1;
314
- justify-content: flex-start;
315
- padding-left: 94px;
316
- }
344
+ font-size: 20px;
345
+ background: rgba(255,248,235,0.6);
346
+ }
347
+
348
+ .category-label {
349
+ display: inline-flex;
350
+ padding: 3px 8px;
351
+ border-radius: 999px;
352
+ font-size: 12px;
353
+ font-weight: 700;
354
+ margin-left: 8px;
355
+ vertical-align: middle;
356
+ }
357
+
358
+ .category-label.weekend {
359
+ background: var(--weekend-bg);
360
+ color: var(--weekend-color);
361
+ }
362
+
363
+ .category-label.normal {
364
+ background: var(--normal-bg);
365
+ color: var(--normal-color);
366
+ }
367
+
368
+ .category-label.round {
369
+ background: var(--round-bg);
370
+ color: var(--round-color);
317
371
  }
318
372
  </style>
319
373
  </head>
320
374
  <body>
321
- <div class="merchant-page">
375
+ <div id="container" class="merchant-page">
322
376
  <div class="background" style="background-image: url('{{background}}');"></div>
323
377
  <div class="content-container">
324
378
  <div class="header">
325
379
  <div class="title-section">
326
380
  <div class="title-main">
327
381
  <div class="title-badge">
328
- {{if titleIcon}}
329
- <img src="{{_res_path}}img/yuanxingshangren.png" alt="{{title}}">
330
- {{else}}
331
-
332
- {{/if}}
382
+ <img src="{{_res_path}}img/yuanxingshangren.png" alt="今日远行商人">
333
383
  </div>
334
384
  <span class="title-text">{{title}}</span>
335
385
  </div>
336
386
  <div class="subtitle">{{subtitle}}</div>
337
387
  </div>
338
388
  <div class="header-side">
339
- <div class="summary-chip">当前商品数 <strong>{{product_count}}</strong></div>
340
- <div class="round-info">
341
- <div class="round-pill">第 {{round_info.current || '未开放'}} / {{round_info.total}} 轮</div>
342
- <div class="countdown-pill">剩余 {{round_info.countdown}}</div>
343
- </div>
389
+ <div class="summary-chip">今日商品数 <strong>{{total_products}}</strong></div>
344
390
  </div>
345
391
  </div>
346
392
 
347
- <div class="products-grid">
348
- {{if products && products.length > 0}}
349
- {{each products product}}
350
- <div class="product-card">
351
- <div class="product-image-container">
352
- <img class="product-image" src="{{product.image}}" alt="{{product.name}}">
353
- </div>
354
- <div class="product-main">
355
- <div class="product-name">{{product.name}}</div>
356
- <div class="product-sub">远行商人当前轮次商品</div>
357
- <div class="product-time">北京时间 {{product.time_label}}</div>
393
+ {{if total_products > 0}}
394
+ {{each categories cat}}
395
+ <div class="category-section">
396
+ <div class="category-header">
397
+ <span class="category-title">{{cat.label}}</span>
398
+ <span class="category-count {{cat.key}}">{{cat.product_count}} 件</span>
399
+ </div>
400
+ {{if cat.key === 'round'}}
401
+ {{each cat.roundGroups group}}
402
+ <div class="round-section {{if group.is_current}}is-current{{/if}}">
403
+ <div class="round-header">
404
+ <span class="round-title">第{{group.round_id}}轮 {{group.label}}</span>
405
+ {{if group.is_current}}
406
+ <span class="round-badge current">当前轮次</span>
407
+ {{/if}}
358
408
  </div>
359
- <div class="product-side">
360
- <div class="product-slot">本轮商品</div>
409
+ {{if group.products && group.products.length > 0}}
410
+ <div class="products-grid">
411
+ {{each group.products product}}
412
+ <div class="product-card">
413
+ <div class="product-image-container">
414
+ <img class="product-image" src="{{product.image}}" alt="{{product.name}}">
415
+ </div>
416
+ <div class="product-main">
417
+ <div class="product-name">{{product.name}}</div>
418
+ <div class="product-time">北京时间 {{product.time_label}}</div>
419
+ </div>
420
+ <div class="product-side">
421
+ <div class="product-slot">第{{group.round_id}}轮</div>
422
+ </div>
423
+ </div>
424
+ {{/each}}
361
425
  </div>
426
+ {{else}}
427
+ <div class="round-empty">该轮次暂无商品</div>
428
+ {{/if}}
362
429
  </div>
363
430
  {{/each}}
364
431
  {{else}}
365
- <div class="product-empty">本轮暂无商品,稍后再来看看。</div>
432
+ <div class="products-grid">
433
+ {{each cat.roundGroups group}}
434
+ {{each group.products product}}
435
+ <div class="product-card">
436
+ <div class="product-image-container">
437
+ <img class="product-image" src="{{product.image}}" alt="{{product.name}}">
438
+ </div>
439
+ <div class="product-main">
440
+ <div class="product-name">{{product.name}}</div>
441
+ <div class="product-time">北京时间 {{product.time_label}}</div>
442
+ </div>
443
+ </div>
444
+ {{/each}}
445
+ {{/each}}
446
+ </div>
366
447
  {{/if}}
367
448
  </div>
449
+ {{/each}}
450
+ {{else}}
451
+ <div class="all-empty">今日暂无已公布的远行商人商品,稍后再来看看。</div>
452
+ {{/if}}
368
453
  </div>
369
454
  </div>
370
455
  </body>