@shwfed/config 3.0.12 → 3.0.14

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 (91) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/runtime/components/actions/buttons/2026-04-18/com.shwfed.actions.button.http.request.json/config.d.vue.ts +2 -2
  3. package/dist/runtime/components/actions/buttons/2026-04-18/com.shwfed.actions.button.http.request.json/config.vue.d.ts +2 -2
  4. package/dist/runtime/components/actions/buttons/2026-04-18/com.shwfed.actions.button.http.request.json.confirm/config.d.vue.ts +2 -2
  5. package/dist/runtime/components/actions/buttons/2026-04-18/com.shwfed.actions.button.http.request.json.confirm/config.vue.d.ts +2 -2
  6. package/dist/runtime/components/actions/buttons/2026-06-08/com.shwfed.actions.button.http.request.json.batch/config.d.vue.ts +2 -2
  7. package/dist/runtime/components/actions/buttons/2026-06-08/com.shwfed.actions.button.http.request.json.batch/config.vue.d.ts +2 -2
  8. package/dist/runtime/components/actions/buttons/2026-06-25/com.shwfed.actions.button.state.write/config.d.vue.ts +8 -8
  9. package/dist/runtime/components/actions/buttons/2026-06-25/com.shwfed.actions.button.state.write/config.vue.d.ts +8 -8
  10. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.digital/config.d.vue.ts +10 -8
  11. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.digital/config.vue +272 -286
  12. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.digital/config.vue.d.ts +10 -8
  13. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.digital/runtime.d.vue.ts +10 -8
  14. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.digital/runtime.vue +91 -291
  15. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.digital/runtime.vue.d.ts +10 -8
  16. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.digital/schema.d.ts +4 -28
  17. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.digital/schema.js +14 -33
  18. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.realestate.lease/config.d.vue.ts +96 -0
  19. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.realestate.lease/config.vue +385 -0
  20. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.realestate.lease/config.vue.d.ts +96 -0
  21. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.realestate.lease/items-colgroup.d.vue.ts +3 -0
  22. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.realestate.lease/items-colgroup.vue +20 -0
  23. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.realestate.lease/items-colgroup.vue.d.ts +3 -0
  24. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.realestate.lease/runtime.d.vue.ts +96 -0
  25. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.realestate.lease/runtime.vue +177 -0
  26. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.realestate.lease/runtime.vue.d.ts +96 -0
  27. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.realestate.lease/schema.d.ts +102 -0
  28. package/dist/runtime/components/config/blocks/2026-07-17/com.shwfed.block.invoice.realestate.lease/schema.js +186 -0
  29. package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.text/config.d.vue.ts +22 -22
  30. package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.text/config.vue.d.ts +22 -22
  31. package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.textarea/config.d.vue.ts +2 -2
  32. package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.textarea/config.vue.d.ts +2 -2
  33. package/dist/runtime/components/form/fields/2026-04-28/com.shwfed.form.field.number/config.d.vue.ts +22 -22
  34. package/dist/runtime/components/form/fields/2026-04-28/com.shwfed.form.field.number/config.vue.d.ts +22 -22
  35. package/dist/runtime/components/form/utils/validation.js +9 -7
  36. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/config.d.vue.ts +2 -2
  37. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/config.vue.d.ts +2 -2
  38. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/config.d.vue.ts +2 -2
  39. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/config.vue.d.ts +2 -2
  40. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/config.d.vue.ts +2 -2
  41. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/config.vue.d.ts +2 -2
  42. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/config.d.vue.ts +2 -2
  43. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/config.vue.d.ts +2 -2
  44. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/config.d.vue.ts +2 -2
  45. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/config.vue.d.ts +2 -2
  46. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/config.d.vue.ts +2 -2
  47. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/config.vue.d.ts +2 -2
  48. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.d.vue.ts +2 -2
  49. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.vue.d.ts +2 -2
  50. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.d.vue.ts +2 -2
  51. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.vue.d.ts +2 -2
  52. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.d.vue.ts +2 -2
  53. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.vue.d.ts +2 -2
  54. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.d.vue.ts +2 -2
  55. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.vue.d.ts +2 -2
  56. package/dist/runtime/components/table/columns/2026-07-16/com.shwfed.table.column.upload/config.vue +57 -247
  57. package/dist/runtime/components/table/columns/2026-07-16/com.shwfed.table.column.upload/prompt.md +2 -2
  58. package/dist/runtime/components/table/columns/2026-07-16/com.shwfed.table.column.upload/runtime.vue +29 -126
  59. package/dist/runtime/components/table/columns/2026-07-16/com.shwfed.table.column.upload/schema.d.ts +5 -27
  60. package/dist/runtime/components/table/columns/2026-07-16/com.shwfed.table.column.upload/schema.js +10 -37
  61. package/dist/runtime/components/ui/invoice/InvoiceSheet.d.vue.ts +66 -0
  62. package/dist/runtime/components/ui/invoice/InvoiceSheet.vue +182 -0
  63. package/dist/runtime/components/ui/invoice/InvoiceSheet.vue.d.ts +66 -0
  64. package/dist/runtime/components/ui/invoice/index.d.ts +1 -0
  65. package/dist/runtime/components/ui/invoice/index.js +1 -0
  66. package/dist/runtime/components/ui/invoice-config/InvoiceConfigShell.d.vue.ts +36 -0
  67. package/dist/runtime/components/ui/invoice-config/InvoiceConfigShell.vue +41 -0
  68. package/dist/runtime/components/ui/invoice-config/InvoiceConfigShell.vue.d.ts +36 -0
  69. package/dist/runtime/components/{config/blocks/2026-07-17/com.shwfed.block.invoice.digital/expr-field.vue → ui/invoice-config/InvoiceExprField.vue} +4 -4
  70. package/dist/runtime/components/{config/blocks/2026-07-17/com.shwfed.block.invoice.digital/json-scope-provider.vue → ui/invoice-config/InvoiceJsonScope.vue} +3 -3
  71. package/dist/runtime/components/{config/blocks/2026-07-17/com.shwfed.block.invoice.digital/row-scope-provider.vue → ui/invoice-config/InvoiceRowScope.vue} +2 -2
  72. package/dist/runtime/components/ui/invoice-config/index.d.ts +4 -0
  73. package/dist/runtime/components/ui/invoice-config/index.js +4 -0
  74. package/dist/runtime/share/invoice-eval.d.ts +13 -0
  75. package/dist/runtime/share/invoice-eval.js +88 -0
  76. package/dist/runtime/share/invoice.d.ts +68 -0
  77. package/dist/runtime/share/invoice.js +35 -0
  78. package/dist/runtime/share/slot-renderer.vue +83 -24
  79. package/dist/runtime/vendor/cel-js/CLAUDE.md +3 -1
  80. package/dist/runtime/vendor/cel-js/PROMPT.md +31 -2
  81. package/dist/runtime/vendor/cel-js/lib/functions.js +28 -1
  82. package/dist/runtime/vendor/cel-js/lib/registry.js +2 -1
  83. package/package.json +1 -1
  84. /package/dist/runtime/components/{config/blocks/2026-07-17/com.shwfed.block.invoice.digital/expr-field.d.vue.ts → ui/invoice-config/InvoiceExprField.d.vue.ts} +0 -0
  85. /package/dist/runtime/components/{config/blocks/2026-07-17/com.shwfed.block.invoice.digital/expr-field.vue.d.ts → ui/invoice-config/InvoiceExprField.vue.d.ts} +0 -0
  86. /package/dist/runtime/components/{config/blocks/2026-07-17/com.shwfed.block.invoice.digital/json-scope-provider.d.vue.ts → ui/invoice-config/InvoiceJsonScope.d.vue.ts} +0 -0
  87. /package/dist/runtime/components/{config/blocks/2026-07-17/com.shwfed.block.invoice.digital/json-scope-provider.vue.d.ts → ui/invoice-config/InvoiceJsonScope.vue.d.ts} +0 -0
  88. /package/dist/runtime/components/{config/blocks/2026-07-17/com.shwfed.block.invoice.digital/row-scope-provider.d.vue.ts → ui/invoice-config/InvoiceRowScope.d.vue.ts} +0 -0
  89. /package/dist/runtime/components/{config/blocks/2026-07-17/com.shwfed.block.invoice.digital/row-scope-provider.vue.d.ts → ui/invoice-config/InvoiceRowScope.vue.d.ts} +0 -0
  90. /package/dist/runtime/{components/config/blocks/2026-07-17/com.shwfed.block.invoice.digital → share}/rmb.d.ts +0 -0
  91. /package/dist/runtime/{components/config/blocks/2026-07-17/com.shwfed.block.invoice.digital → share}/rmb.js +0 -0
@@ -1,10 +1,14 @@
1
1
  <script setup>
2
2
  import { computed, ref } from "vue";
3
- import { Icon } from "@iconify/vue";
4
3
  import { Field, FieldLabel } from "../../../../ui/field";
5
4
  import { InputGroup, InputGroupInput } from "../../../../ui/input-group";
5
+ import {
6
+ InvoiceConfigShell,
7
+ InvoiceExprField,
8
+ InvoiceJsonScope,
9
+ InvoiceRowScope
10
+ } from "../../../../ui/invoice-config";
6
11
  import { Markdown } from "../../../../ui/markdown";
7
- import { ScrollArea } from "../../../../ui/scroll-area";
8
12
  import {
9
13
  Select,
10
14
  SelectContent,
@@ -12,9 +16,6 @@ import {
12
16
  SelectTrigger,
13
17
  SelectValue
14
18
  } from "../../../../ui/select";
15
- import ExprField from "./expr-field.vue";
16
- import JsonScopeProvider from "./json-scope-provider.vue";
17
- import RowScopeProvider from "./row-scope-provider.vue";
18
19
  import {
19
20
  getStructFieldDescription,
20
21
  getStructFieldTitle,
@@ -88,311 +89,296 @@ const kindValue = computed(() => block.value.kind ?? "special");
88
89
  </script>
89
90
 
90
91
  <template>
91
- <div class="flex min-w-0 gap-2 min-h-128">
92
- <!-- 左栏:票面分区 -->
93
- <div class="flex w-44 shrink-0 flex-col">
94
- <ScrollArea class="flex-1">
95
- <div
96
- v-for="s in SECTIONS"
97
- :key="s.key"
98
- class="row"
99
- :class="section === s.key ? 'bg-[color-mix(in_srgb,var(--primary)_10%,white)] text-(--primary)' : 'text-zinc-700 hover:bg-zinc-50'"
100
- @click="section = s.key"
101
- >
102
- <Icon
103
- :icon="s.icon"
104
- class="size-4 shrink-0"
92
+ <InvoiceConfigShell
93
+ v-model:section="section"
94
+ :sections="SECTIONS"
95
+ >
96
+ <template v-if="section === 'general'">
97
+ <Field orientation="vertical">
98
+ <FieldLabel class="text-xs text-zinc-500">
99
+ <template
100
+ v-if="fieldDescription('displayName')"
101
+ #tooltip
102
+ >
103
+ <Markdown
104
+ :source="fieldDescription('displayName')"
105
+ block
106
+ class="prose prose-sm prose-zinc"
107
+ />
108
+ </template>
109
+ {{ fieldTitle("displayName") }}
110
+ </FieldLabel>
111
+ <InputGroup>
112
+ <InputGroupInput
113
+ :model-value="block.displayName ?? ''"
114
+ placeholder="例:进项发票预览"
115
+ @update:model-value="setDisplayName"
105
116
  />
106
- <span class="flex-1 truncate">{{ s.label }}</span>
117
+ </InputGroup>
118
+ </Field>
119
+
120
+ <Field orientation="vertical">
121
+ <FieldLabel class="text-xs text-zinc-500">
122
+ <template
123
+ v-if="fieldDescription('kind')"
124
+ #tooltip
125
+ >
126
+ <Markdown
127
+ :source="fieldDescription('kind')"
128
+ block
129
+ class="prose prose-sm prose-zinc"
130
+ />
131
+ </template>
132
+ {{ fieldTitle("kind") }}
133
+ </FieldLabel>
134
+ <Select
135
+ :model-value="kindValue"
136
+ @update:model-value="setKind"
137
+ >
138
+ <SelectTrigger class="w-full">
139
+ <SelectValue />
140
+ </SelectTrigger>
141
+ <SelectContent>
142
+ <SelectItem
143
+ v-for="k in INVOICE_KINDS"
144
+ :key="k"
145
+ :value="k"
146
+ >
147
+ {{ INVOICE_KIND_LABELS[k] }}
148
+ </SelectItem>
149
+ </SelectContent>
150
+ </Select>
151
+ </Field>
152
+
153
+ <!-- 「隐藏条件」与「请求」同在 InvoiceJsonScope 之外:前者由宿主在渲染本块之前
154
+ 求值(`json` 尚不存在),后者就是产出 `json` 的那个表达式。 -->
155
+ <InvoiceExprField
156
+ :label="fieldTitle('hidden')"
157
+ :description="fieldDescription('hidden')"
158
+ :model-value="block.hidden ?? ''"
159
+ placeholder="可选;返回 bool,如 item.fplx == 'zl'"
160
+ @update:model-value="(v) => setOptional('hidden', v)"
161
+ />
162
+
163
+ <InvoiceExprField
164
+ :label="fieldTitle('request')"
165
+ :description="fieldDescription('request')"
166
+ :model-value="block.request ?? ''"
167
+ placeholder="可选;如 http.get('/api/invoice/' + item.id)"
168
+ multiline
169
+ @update:model-value="(v) => setOptional('request', v)"
170
+ />
171
+ </template>
172
+
173
+ <!-- 除「通用配置」外的每个分区都在 `json` 作用域内 —— `请求` 的响应体票面各栏
174
+ 都能读。Provider 本身不渲染元素,所以外层 flex 布局不受影响。 -->
175
+ <InvoiceJsonScope v-else>
176
+ <template v-if="section === 'head'">
177
+ <InvoiceExprField
178
+ :label="fieldTitle('invoiceNumber')"
179
+ :description="fieldDescription('invoiceNumber')"
180
+ :model-value="block.invoiceNumber"
181
+ placeholder="如 json.fphm"
182
+ @update:model-value="(v) => setRequired('invoiceNumber', v)"
183
+ />
184
+ <InvoiceExprField
185
+ :label="fieldTitle('issueDate')"
186
+ :description="fieldDescription('issueDate')"
187
+ :model-value="block.issueDate"
188
+ placeholder="如 json.kprq"
189
+ @update:model-value="(v) => setRequired('issueDate', v)"
190
+ />
191
+ </template>
192
+
193
+ <template v-else-if="section === 'parties'">
194
+ <div class="text-xs font-medium text-zinc-500">
195
+ 购买方信息
107
196
  </div>
108
- </ScrollArea>
109
- </div>
197
+ <InvoiceExprField
198
+ :label="buyerTitle('name')"
199
+ :description="buyerDescription('name')"
200
+ :model-value="block.buyer.name"
201
+ placeholder="如 json.gf.mc"
202
+ @update:model-value="(v) => setParty('buyer', 'name', v)"
203
+ />
204
+ <InvoiceExprField
205
+ :label="buyerTitle('taxId')"
206
+ :description="buyerDescription('taxId')"
207
+ :model-value="block.buyer.taxId"
208
+ placeholder="如 json.gf.nsrsbh"
209
+ @update:model-value="(v) => setParty('buyer', 'taxId', v)"
210
+ />
211
+
212
+ <div class="mt-2 text-xs font-medium text-zinc-500">
213
+ 销售方信息
214
+ </div>
215
+ <InvoiceExprField
216
+ :label="sellerTitle('name')"
217
+ :description="sellerDescription('name')"
218
+ :model-value="block.seller.name"
219
+ placeholder="如 json.xf.mc"
220
+ @update:model-value="(v) => setParty('seller', 'name', v)"
221
+ />
222
+ <InvoiceExprField
223
+ :label="sellerTitle('taxId')"
224
+ :description="sellerDescription('taxId')"
225
+ :model-value="block.seller.taxId"
226
+ placeholder="如 json.xf.nsrsbh"
227
+ @update:model-value="(v) => setParty('seller', 'taxId', v)"
228
+ />
229
+ </template>
110
230
 
111
- <!-- 右栏 -->
112
- <div class="flex min-w-0 flex-1 flex-col gap-3">
113
- <template v-if="section === 'general'">
231
+ <template v-else-if="section === 'items'">
114
232
  <Field orientation="vertical">
115
233
  <FieldLabel class="text-xs text-zinc-500">
116
234
  <template
117
- v-if="fieldDescription('displayName')"
235
+ v-if="fieldDescription('itemsMaxHeight')"
118
236
  #tooltip
119
237
  >
120
238
  <Markdown
121
- :source="fieldDescription('displayName')"
239
+ :source="fieldDescription('itemsMaxHeight')"
122
240
  block
123
241
  class="prose prose-sm prose-zinc"
124
242
  />
125
243
  </template>
126
- {{ fieldTitle("displayName") }}
244
+ {{ fieldTitle("itemsMaxHeight") }}
127
245
  </FieldLabel>
128
246
  <InputGroup>
129
247
  <InputGroupInput
130
- :model-value="block.displayName ?? ''"
131
- placeholder="例:进项发票预览"
132
- @update:model-value="setDisplayName"
248
+ :model-value="block.itemsMaxHeight ?? ''"
249
+ placeholder="可选;如 24rem。留空则明细区随行数增长"
250
+ @update:model-value="setItemsMaxHeight"
133
251
  />
134
252
  </InputGroup>
135
253
  </Field>
136
254
 
137
- <Field orientation="vertical">
138
- <FieldLabel class="text-xs text-zinc-500">
139
- <template
140
- v-if="fieldDescription('kind')"
141
- #tooltip
142
- >
143
- <Markdown
144
- :source="fieldDescription('kind')"
145
- block
146
- class="prose prose-sm prose-zinc"
147
- />
148
- </template>
149
- {{ fieldTitle("kind") }}
150
- </FieldLabel>
151
- <Select
152
- :model-value="kindValue"
153
- @update:model-value="setKind"
154
- >
155
- <SelectTrigger class="w-full">
156
- <SelectValue />
157
- </SelectTrigger>
158
- <SelectContent>
159
- <SelectItem
160
- v-for="k in INVOICE_KINDS"
161
- :key="k"
162
- :value="k"
163
- >
164
- {{ INVOICE_KIND_LABELS[k] }}
165
- </SelectItem>
166
- </SelectContent>
167
- </Select>
168
- </Field>
169
-
170
- <!-- 「请求」在 JsonScopeProvider 之外 —— 它是产出 `json` 的表达式,自己看不到
171
- `json`(schema 侧的 `bodyConfigure` 同样不给它注册)。 -->
172
- <ExprField
173
- :label="fieldTitle('request')"
174
- :description="fieldDescription('request')"
175
- :model-value="block.request ?? ''"
176
- placeholder="可选;如 http.get('/api/invoice/' + item.id)"
255
+ <!-- `明细列表` 在页面作用域求值(没有「当前行」),故在 InvoiceRowScope 之外 -->
256
+ <InvoiceExprField
257
+ :label="fieldTitle('items')"
258
+ :description="fieldDescription('items')"
259
+ :model-value="block.items"
260
+ placeholder="返回明细列表的表达式,如 json.mxList"
177
261
  multiline
178
- @update:model-value="(v) => setOptional('request', v)"
262
+ @update:model-value="(v) => setRequired('items', v)"
179
263
  />
180
- </template>
181
264
 
182
- <!-- 除「通用配置」外的每个分区都在 `json` 作用域内 —— `请求` 的响应体票面各栏
183
- 都能读。Provider 本身不渲染元素,所以外层 flex 布局不受影响。 -->
184
- <JsonScopeProvider v-else>
185
- <template v-if="section === 'head'">
186
- <ExprField
187
- :label="fieldTitle('invoiceNumber')"
188
- :description="fieldDescription('invoiceNumber')"
189
- :model-value="block.invoiceNumber"
190
- placeholder="如 json.fphm"
191
- @update:model-value="(v) => setRequired('invoiceNumber', v)"
192
- />
193
- <ExprField
194
- :label="fieldTitle('issueDate')"
195
- :description="fieldDescription('issueDate')"
196
- :model-value="block.issueDate"
197
- placeholder="如 json.kprq"
198
- @update:model-value="(v) => setRequired('issueDate', v)"
199
- />
200
- </template>
201
-
202
- <template v-else-if="section === 'parties'">
203
- <div class="text-xs font-medium text-zinc-500">
204
- 购买方信息
205
- </div>
206
- <ExprField
207
- :label="buyerTitle('name')"
208
- :description="buyerDescription('name')"
209
- :model-value="block.buyer.name"
210
- placeholder="如 json.gf.mc"
211
- @update:model-value="(v) => setParty('buyer', 'name', v)"
212
- />
213
- <ExprField
214
- :label="buyerTitle('taxId')"
215
- :description="buyerDescription('taxId')"
216
- :model-value="block.buyer.taxId"
217
- placeholder="如 json.gf.nsrsbh"
218
- @update:model-value="(v) => setParty('buyer', 'taxId', v)"
219
- />
220
-
221
- <div class="mt-2 text-xs font-medium text-zinc-500">
222
- 销售方信息
223
- </div>
224
- <ExprField
225
- :label="sellerTitle('name')"
226
- :description="sellerDescription('name')"
227
- :model-value="block.seller.name"
228
- placeholder="如 json.xf.mc"
229
- @update:model-value="(v) => setParty('seller', 'name', v)"
230
- />
231
- <ExprField
232
- :label="sellerTitle('taxId')"
233
- :description="sellerDescription('taxId')"
234
- :model-value="block.seller.taxId"
235
- placeholder="如 json.xf.nsrsbh"
236
- @update:model-value="(v) => setParty('seller', 'taxId', v)"
237
- />
238
- </template>
239
-
240
- <template v-else-if="section === 'items'">
241
- <Field orientation="vertical">
242
- <FieldLabel class="text-xs text-zinc-500">
243
- <template
244
- v-if="fieldDescription('itemsMaxHeight')"
245
- #tooltip
246
- >
247
- <Markdown
248
- :source="fieldDescription('itemsMaxHeight')"
249
- block
250
- class="prose prose-sm prose-zinc"
251
- />
252
- </template>
253
- {{ fieldTitle("itemsMaxHeight") }}
254
- </FieldLabel>
255
- <InputGroup>
256
- <InputGroupInput
257
- :model-value="block.itemsMaxHeight ?? ''"
258
- placeholder="可选;如 24rem。留空则明细区随行数增长"
259
- @update:model-value="setItemsMaxHeight"
260
- />
261
- </InputGroup>
262
- </Field>
263
-
264
- <!-- `明细列表` 在页面作用域求值(没有「当前行」),故在 RowScopeProvider 之外 -->
265
- <ExprField
266
- :label="fieldTitle('items')"
267
- :description="fieldDescription('items')"
268
- :model-value="block.items"
269
- placeholder="返回明细列表的表达式,如 json.mxList"
270
- multiline
271
- @update:model-value="(v) => setRequired('items', v)"
272
- />
273
-
274
- <!-- 行内栏位可见 item / index;广告作用域与 schema 的 lineSchema 一致 -->
275
- <RowScopeProvider>
276
- <div class="flex flex-col gap-3">
277
- <div class="text-xs font-medium text-zinc-500">
278
- 明细行
279
- </div>
280
- <ExprField
281
- :label="lineTitle('name')"
282
- :description="lineDescription('name')"
283
- :model-value="block.line.name"
284
- placeholder="如 item.xmmc"
285
- @update:model-value="(v) => setLineRequired('name', v)"
286
- />
287
- <ExprField
288
- :label="lineTitle('spec')"
289
- :description="lineDescription('spec')"
290
- :model-value="block.line.spec ?? ''"
291
- placeholder="可选;如 item.ggxh"
292
- @update:model-value="(v) => setLineOptional('spec', v)"
293
- />
294
- <ExprField
295
- :label="lineTitle('unit')"
296
- :description="lineDescription('unit')"
297
- :model-value="block.line.unit ?? ''"
298
- placeholder="可选;如 item.dw"
299
- @update:model-value="(v) => setLineOptional('unit', v)"
300
- />
301
- <ExprField
302
- :label="lineTitle('quantity')"
303
- :description="lineDescription('quantity')"
304
- :model-value="block.line.quantity ?? ''"
305
- placeholder="可选;如 item.sl"
306
- @update:model-value="(v) => setLineOptional('quantity', v)"
307
- />
308
- <ExprField
309
- :label="lineTitle('unitPrice')"
310
- :description="lineDescription('unitPrice')"
311
- :model-value="block.line.unitPrice ?? ''"
312
- placeholder="可选;如 item.dj"
313
- @update:model-value="(v) => setLineOptional('unitPrice', v)"
314
- />
315
- <ExprField
316
- :label="lineTitle('amount')"
317
- :description="lineDescription('amount')"
318
- :model-value="block.line.amount"
319
- placeholder="如 item.je"
320
- @update:model-value="(v) => setLineRequired('amount', v)"
321
- />
322
- <ExprField
323
- :label="lineTitle('taxRate')"
324
- :description="lineDescription('taxRate')"
325
- :model-value="block.line.taxRate ?? ''"
326
- placeholder="可选;如 item.slv(原样打印,可为「免税」)"
327
- @update:model-value="(v) => setLineOptional('taxRate', v)"
328
- />
329
- <ExprField
330
- :label="lineTitle('taxAmount')"
331
- :description="lineDescription('taxAmount')"
332
- :model-value="block.line.taxAmount ?? ''"
333
- placeholder="可选;如 item.se"
334
- @update:model-value="(v) => setLineOptional('taxAmount', v)"
335
- />
265
+ <!-- 行内栏位可见 item / index;广告作用域与 schema 的 lineSchema 一致 -->
266
+ <InvoiceRowScope>
267
+ <div class="flex flex-col gap-3">
268
+ <div class="text-xs font-medium text-zinc-500">
269
+ 明细行
336
270
  </div>
337
- </RowScopeProvider>
338
- </template>
271
+ <InvoiceExprField
272
+ :label="lineTitle('name')"
273
+ :description="lineDescription('name')"
274
+ :model-value="block.line.name"
275
+ placeholder="如 item.xmmc"
276
+ @update:model-value="(v) => setLineRequired('name', v)"
277
+ />
278
+ <InvoiceExprField
279
+ :label="lineTitle('spec')"
280
+ :description="lineDescription('spec')"
281
+ :model-value="block.line.spec ?? ''"
282
+ placeholder="可选;如 item.ggxh"
283
+ @update:model-value="(v) => setLineOptional('spec', v)"
284
+ />
285
+ <InvoiceExprField
286
+ :label="lineTitle('unit')"
287
+ :description="lineDescription('unit')"
288
+ :model-value="block.line.unit ?? ''"
289
+ placeholder="可选;如 item.dw"
290
+ @update:model-value="(v) => setLineOptional('unit', v)"
291
+ />
292
+ <InvoiceExprField
293
+ :label="lineTitle('quantity')"
294
+ :description="lineDescription('quantity')"
295
+ :model-value="block.line.quantity ?? ''"
296
+ placeholder="可选;如 item.sl"
297
+ @update:model-value="(v) => setLineOptional('quantity', v)"
298
+ />
299
+ <InvoiceExprField
300
+ :label="lineTitle('unitPrice')"
301
+ :description="lineDescription('unitPrice')"
302
+ :model-value="block.line.unitPrice ?? ''"
303
+ placeholder="可选;如 item.dj"
304
+ @update:model-value="(v) => setLineOptional('unitPrice', v)"
305
+ />
306
+ <InvoiceExprField
307
+ :label="lineTitle('amount')"
308
+ :description="lineDescription('amount')"
309
+ :model-value="block.line.amount"
310
+ placeholder="如 item.je"
311
+ @update:model-value="(v) => setLineRequired('amount', v)"
312
+ />
313
+ <InvoiceExprField
314
+ :label="lineTitle('taxRate')"
315
+ :description="lineDescription('taxRate')"
316
+ :model-value="block.line.taxRate ?? ''"
317
+ placeholder="可选;如 item.slv(原样打印,可为「免税」)"
318
+ @update:model-value="(v) => setLineOptional('taxRate', v)"
319
+ />
320
+ <InvoiceExprField
321
+ :label="lineTitle('taxAmount')"
322
+ :description="lineDescription('taxAmount')"
323
+ :model-value="block.line.taxAmount ?? ''"
324
+ placeholder="可选;如 item.se"
325
+ @update:model-value="(v) => setLineOptional('taxAmount', v)"
326
+ />
327
+ </div>
328
+ </InvoiceRowScope>
329
+ </template>
339
330
 
340
- <template v-else-if="section === 'totals'">
341
- <ExprField
342
- :label="fieldTitle('totalAmount')"
343
- :description="fieldDescription('totalAmount')"
344
- :model-value="block.totalAmount"
345
- placeholder="如 json.hjje"
346
- @update:model-value="(v) => setRequired('totalAmount', v)"
347
- />
348
- <ExprField
349
- :label="fieldTitle('totalTax')"
350
- :description="fieldDescription('totalTax')"
351
- :model-value="block.totalTax"
352
- placeholder="如 json.hjse"
353
- @update:model-value="(v) => setRequired('totalTax', v)"
354
- />
355
- <ExprField
356
- :label="fieldTitle('grandTotal')"
357
- :description="fieldDescription('grandTotal')"
358
- :model-value="block.grandTotal"
359
- placeholder="如 json.jshj"
360
- @update:model-value="(v) => setRequired('grandTotal', v)"
361
- />
362
- <p class="text-xs text-zinc-400">
363
- 大写栏由「价税合计」本地推导,无需配置。
364
- </p>
365
- </template>
331
+ <template v-else-if="section === 'totals'">
332
+ <InvoiceExprField
333
+ :label="fieldTitle('totalAmount')"
334
+ :description="fieldDescription('totalAmount')"
335
+ :model-value="block.totalAmount"
336
+ placeholder="如 json.hjje"
337
+ @update:model-value="(v) => setRequired('totalAmount', v)"
338
+ />
339
+ <InvoiceExprField
340
+ :label="fieldTitle('totalTax')"
341
+ :description="fieldDescription('totalTax')"
342
+ :model-value="block.totalTax"
343
+ placeholder="如 json.hjse"
344
+ @update:model-value="(v) => setRequired('totalTax', v)"
345
+ />
346
+ <InvoiceExprField
347
+ :label="fieldTitle('grandTotal')"
348
+ :description="fieldDescription('grandTotal')"
349
+ :model-value="block.grandTotal"
350
+ placeholder="如 json.jshj"
351
+ @update:model-value="(v) => setRequired('grandTotal', v)"
352
+ />
353
+ <p class="text-xs text-zinc-400">
354
+ 大写栏由「价税合计」本地推导,无需配置。
355
+ </p>
356
+ </template>
366
357
 
367
- <template v-else-if="section === 'remark'">
368
- <ExprField
369
- :label="fieldTitle('remark')"
370
- :description="fieldDescription('remark')"
371
- :model-value="block.remark ?? ''"
372
- placeholder="可选;如 json.bz。开户行、账号、红字确认单编号均属此栏"
373
- multiline
374
- @update:model-value="(v) => setOptional('remark', v)"
375
- />
376
- <ExprField
377
- :label="fieldTitle('issuer')"
378
- :description="fieldDescription('issuer')"
379
- :model-value="block.issuer ?? ''"
380
- placeholder="可选;如 json.kpr"
381
- @update:model-value="(v) => setOptional('issuer', v)"
382
- />
383
- <ExprField
384
- :label="fieldTitle('redLetter')"
385
- :description="fieldDescription('redLetter')"
386
- :model-value="block.redLetter ?? ''"
387
- placeholder="可选;返回 bool,如 json.jshj < 0.0"
388
- @update:model-value="(v) => setOptional('redLetter', v)"
389
- />
390
- </template>
391
- </JsonScopeProvider>
392
- </div>
393
- </div>
358
+ <template v-else-if="section === 'remark'">
359
+ <InvoiceExprField
360
+ :label="fieldTitle('remark')"
361
+ :description="fieldDescription('remark')"
362
+ :model-value="block.remark ?? ''"
363
+ placeholder="可选;如 json.bz。开户行、账号、红字确认单编号均属此栏"
364
+ multiline
365
+ @update:model-value="(v) => setOptional('remark', v)"
366
+ />
367
+ <InvoiceExprField
368
+ :label="fieldTitle('issuer')"
369
+ :description="fieldDescription('issuer')"
370
+ :model-value="block.issuer ?? ''"
371
+ placeholder="可选;如 json.kpr"
372
+ @update:model-value="(v) => setOptional('issuer', v)"
373
+ />
374
+ <InvoiceExprField
375
+ :label="fieldTitle('redLetter')"
376
+ :description="fieldDescription('redLetter')"
377
+ :model-value="block.redLetter ?? ''"
378
+ placeholder="可选;返回 bool,如 json.jshj < 0.0"
379
+ @update:model-value="(v) => setOptional('redLetter', v)"
380
+ />
381
+ </template>
382
+ </InvoiceJsonScope>
383
+ </InvoiceConfigShell>
394
384
  </template>
395
-
396
- <style scoped>
397
- .row{align-items:center;border-radius:.25rem;cursor:pointer;display:flex;font-size:.875rem;gap:.375rem;padding-block:.375rem;padding-left:.5rem;padding-right:.5rem;position:relative;transition:background-color .1s ease;-webkit-user-select:none;-moz-user-select:none;user-select:none}
398
- </style>
@@ -21,12 +21,12 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
21
21
  readonly taxRate?: string | undefined;
22
22
  readonly taxAmount?: string | undefined;
23
23
  };
24
+ readonly hidden?: string | undefined;
24
25
  readonly displayName?: string | undefined;
25
26
  readonly kind?: "normal" | "special" | undefined;
26
27
  readonly compatibilityDate: "2026-07-17";
27
28
  readonly items: string;
28
29
  readonly request?: string | undefined;
29
- readonly itemsMaxHeight?: string | undefined;
30
30
  readonly invoiceNumber: string;
31
31
  readonly issueDate: string;
32
32
  readonly buyer: {
@@ -37,12 +37,13 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
37
37
  readonly name: string;
38
38
  readonly taxId: string;
39
39
  };
40
- readonly totalAmount: string;
41
- readonly totalTax: string;
42
40
  readonly grandTotal: string;
43
- readonly remark?: string | undefined;
44
41
  readonly issuer?: string | undefined;
45
42
  readonly redLetter?: string | undefined;
43
+ readonly itemsMaxHeight?: string | undefined;
44
+ readonly remark?: string | undefined;
45
+ readonly totalAmount: string;
46
+ readonly totalTax: string;
46
47
  }) => any;
47
48
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
48
49
  "onUpdate:modelValue"?: ((value: {
@@ -58,12 +59,12 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
58
59
  readonly taxRate?: string | undefined;
59
60
  readonly taxAmount?: string | undefined;
60
61
  };
62
+ readonly hidden?: string | undefined;
61
63
  readonly displayName?: string | undefined;
62
64
  readonly kind?: "normal" | "special" | undefined;
63
65
  readonly compatibilityDate: "2026-07-17";
64
66
  readonly items: string;
65
67
  readonly request?: string | undefined;
66
- readonly itemsMaxHeight?: string | undefined;
67
68
  readonly invoiceNumber: string;
68
69
  readonly issueDate: string;
69
70
  readonly buyer: {
@@ -74,12 +75,13 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
74
75
  readonly name: string;
75
76
  readonly taxId: string;
76
77
  };
77
- readonly totalAmount: string;
78
- readonly totalTax: string;
79
78
  readonly grandTotal: string;
80
- readonly remark?: string | undefined;
81
79
  readonly issuer?: string | undefined;
82
80
  readonly redLetter?: string | undefined;
81
+ readonly itemsMaxHeight?: string | undefined;
82
+ readonly remark?: string | undefined;
83
+ readonly totalAmount: string;
84
+ readonly totalTax: string;
83
85
  }) => any) | undefined;
84
86
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
85
87
  declare const _default: typeof __VLS_export;