User: form rendered every field as a plain text box; no type (dropdown/date/number), and
FK fields didn't pull options from their source tables.
- FormCollect schema now carries per-field type: fkselect | select | number | date | text
(+ options for select, fkTable for fkselect, hint for placeholder).
Types inferred from column data type for generic forms; curated for quote.
- New GET /api/agent/form/options?table=&q=&brandsid= -> FK options from the source table
(elecustomer/eleproduct/elematerials...), whitelisted to tables that appear as sFkTable in the
field dict (rejects arbitrary tables e.g. gdslogininfo), tenant-filtered + LIMIT.
- chat.html renderFormCollect renders by type: fkselect = searchable <input list=datalist> that
fetches options on focus/typing; select = <select>; number = <input type=number>; date picker; text.
- Fix: tolerant label matching (strip parentheticals) so '多数量' maps whether or not the LLM keeps
the '(逗号分隔)' hint -> multi-qty rows now reliably created.
Verified via agent: quote form shows 客户/产品/物料=fkselect, 单位/印刷/颜色/单双面=select,
尺寸/数量/单价/系数=number; options endpoint returns real names (客户 q=Little -> Little Antelope);
non-FK table rejected; full write incl 多数量 (BJD202607086 -> 2000/4000/6000).