Archived
用户在工作台上连报六条(2026-08-27):
- 对话区把数据工单摆成「执行工单」→ 契约 ExecutionWorkOrder.variant:'data'(引擎侧与执行工单无异,
只换面孔),归一层从卡上带下来,web 新增 DataForm(同一套办法、另一副面孔:色/图标/「数据工单」/「确认写入」),
办结卡与治理台人类工具目录同步;活动的两张数据工单卡骨架标 variant:"data"。
- 表显示不全不能右滑 → 目标件把 overflow-x:auto 写在 .tbl-wrap,平台包装是 .jc-tbl-wrap,谁都没管到;补一条。
- 表头只留中文 → 三张数据工单表去英文列名与 .thd 小字。
- 编辑态内部料号「只读字 + 输入框」并排 → 目标件 #tbl1 .jc-vcell{display:inline}(id 特异度)盖过
table.on 的隐藏规则,表 1 每格其实都并排,PN 那格恰好有字;用 id 特异度覆盖回去。
- input 与 select 没对齐 → 徽标从前包 .ro 编辑态留着、压在下拉框头上把那格顶低 13px,改成随只读格一起藏;
input/select 钉同一高度。
- 第一步「派数据工单还是放弃候选」不该问人 → 决策卡退役(覆盖规格「候选 ≥2 可放弃」那一条,用户定),
查无记录一律自动派;剧本/说明书/测试/e2e 同步(e2e 新增 expectAsks.max 断言「不该问的没问」)。
顺带:5173 的 /api 反代默认指向一条公网隧道(150.158.83.131:46100 → nps → npc → 本机 :8787),
浏览器每次请求先出公网再绕回来;默认改回本机,要远端的显式给 API_PROXY_TARGET。
静态渲染实证:900px 宽的框里横向能滑 200px;编辑态同一行 3 input + 1 select 全部 32px 同一 y;
只读 PN 格 display:none。活动包 1.4.0;2097 测 / typecheck / lint / depcruise 绿。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FJcX8A6TWp4GRs41TYryEh
72 lines
3.0 KiB
TypeScript
72 lines
3.0 KiB
TypeScript
import { defineConfig } from 'vite';
|
|
import react from '@vitejs/plugin-react';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
const root = fileURLToPath(new URL('../..', import.meta.url));
|
|
const p = (rel: string) => fileURLToPath(new URL(rel, import.meta.url));
|
|
|
|
/*
|
|
* 稳定版(./stable.sh)用 `vite preview` 托 .build/stable 的静态文件。preview 有一道宿主校验
|
|
* (防 DNS rebinding),默认只放 localhost 与 IP —— 经域名 / 反代进来会被拦:
|
|
* 「Blocked request. This host ("…") is not allowed.」
|
|
* 放哪些宿主由起它的人说(PREVIEW_ALLOWED_HOSTS,逗号分隔;`.example.com` 放整个子域;`*` 全放)。
|
|
* 开发那台 `vite` 不读这个,不受影响。
|
|
*/
|
|
const previewHosts = process.env.PREVIEW_ALLOWED_HOSTS?.trim();
|
|
const preview =
|
|
previewHosts === undefined || previewHosts === ''
|
|
? {}
|
|
: {
|
|
preview: {
|
|
allowedHosts:
|
|
previewHosts === '*'
|
|
? (true as const)
|
|
: previewHosts
|
|
.split(',')
|
|
.map((s) => s.trim())
|
|
.filter((s) => s !== ''),
|
|
},
|
|
};
|
|
|
|
export default defineConfig({
|
|
...preview,
|
|
plugins: [react()],
|
|
resolve: {
|
|
alias: {
|
|
'@contracts': `${root}packages/contracts/src/index.ts`,
|
|
'@sfeel': `${root}packages/sfeel/src/index.ts`,
|
|
'@ui': `${root}packages/ui-kit/src/index.ts`,
|
|
'@utils': `${root}packages/utils/src/index.ts`,
|
|
'@features': p('./src/features'),
|
|
'@web-shared': p('./src/shared'),
|
|
'@contracts/': `${root}packages/contracts/src/`,
|
|
},
|
|
},
|
|
server: {
|
|
port: 5173,
|
|
/*
|
|
* 双栈全绑(host: true = `::` 双栈 any)。
|
|
*
|
|
* 这坑栽过**两次**:不给 host 时只绑 `[::1]`,`127.0.0.1` 连不上;
|
|
* 改绑 `127.0.0.1` 后 `[::1]` 又连不上 —— 单栈回环怎么绑都有一族是死的,
|
|
* 浏览器把 localhost 解析到哪族全看系统心情,表现就是「时好时坏」。
|
|
* 回环双栈没有单 socket 的绑法,只能 any。
|
|
*
|
|
* 代价说明白:这会暴露到局域网 —— 但 API 从来就是 `*:8787`(Node 默认双栈 any),
|
|
* Web 跟它对齐并没有扩大暴露面;有登录门,且这是开发机。
|
|
* 要收回环,把这里改回 '127.0.0.1',并接受 [::1] 那族不通。
|
|
*/
|
|
host: true,
|
|
proxy: {
|
|
/*
|
|
* **默认连本机 API(:8787)**;要连测试服务器就显式给 `API_PROXY_TARGET=http://150.158.83.131:46100`。
|
|
* 从前反过来(默认远端、本地要覆盖):实测那条远端是一条**隧道回到本机 :8787**,
|
|
* 浏览器的每一次请求都先出公网再绕回来 —— 能用,但慢,且隧道一断本地开发就整个瘫掉,
|
|
* 而人只会看到「前端调的后端不太对」(2026-08-27)。CLAUDE.md 写的本地工作流是
|
|
* `pnpm dev:api` + `pnpm dev:web`,默认值就该服务于这条路;要远端的人自己说出来。
|
|
*/
|
|
'/api': { target: process.env.API_PROXY_TARGET ?? 'http://127.0.0.1:8787', changeOrigin: true },
|
|
},
|
|
},
|
|
});
|