diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..7c06ddf --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,19 @@ +# AGENTS.md — Encoding & Chinese Safety Rules + +## Absolute rules (must follow) +1. Never corrupt non-ASCII text (Chinese, emoji, etc.). Preserve exact Unicode characters. +2. NEVER rewrite entire files when only small edits are needed. Always apply minimal diffs/patches. +3. If a file contains Chinese characters, do not “normalize”, “escape”, “re-encode”, or “replace” them. +4. When reading/writing files via scripts/tools, always use UTF-8 explicitly (no platform default encoding). + +## Windows / PowerShell rules +- If you need to run PowerShell, force UTF-8 output/input: + - Use: `[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new()` + - Prefer `Set-Content -Encoding utf8` / `Out-File -Encoding utf8` +- Avoid commands that may round-trip through ANSI/CP936/CP1252 without explicit encoding. + +## Workflow +- Before editing: inspect the target lines only. +- Apply changes as a patch (line-level edits), not full-file regeneration. +- After editing: verify the edited lines still show correct Chinese. +- If uncertain: stop and ask rather than guessing and corrupting text. \ No newline at end of file diff --git a/index.html b/index.html index cf2bef4..e76de1c 100644 --- a/index.html +++ b/index.html @@ -9,6 +9,7 @@
- - diff --git a/src/components/common/XmFactorGrid.vue b/src/components/common/XmFactorGrid.vue index 1707f7a..04dce77 100644 --- a/src/components/common/XmFactorGrid.vue +++ b/src/components/common/XmFactorGrid.vue @@ -13,6 +13,7 @@ interface DictItem { defCoe: number | null desc?: string | null notshowByzxflxs?: boolean + order?: number | null } interface FactorRow { @@ -61,10 +62,12 @@ const sortedDictEntries = () => return true }) .sort((a, b) => { - const aNum = Number(a[0]) - const bNum = Number(b[0]) - if (Number.isFinite(aNum) && Number.isFinite(bNum)) return aNum - bNum - return String(a[0]).localeCompare(String(b[0])) + const aOrder = Number(a[1]?.order) + const bOrder = Number(b[1]?.order) + if (Number.isFinite(aOrder) && Number.isFinite(bOrder) && aOrder !== bOrder) return aOrder - bOrder + if (Number.isFinite(aOrder) && !Number.isFinite(bOrder)) return -1 + if (!Number.isFinite(aOrder) && Number.isFinite(bOrder)) return 1 + return String(a[1]?.code || a[0]).localeCompare(String(b[1]?.code || b[0])) }) const buildCodePath = (code: string, selfId: string, codeIdMap: Map) => { diff --git a/src/components/common/xmCommonAgGrid.vue b/src/components/common/xmCommonAgGrid.vue new file mode 100644 index 0000000..8862673 --- /dev/null +++ b/src/components/common/xmCommonAgGrid.vue @@ -0,0 +1,244 @@ + + + diff --git a/src/components/views/Ht.vue b/src/components/views/Ht.vue index 79ccf8c..3848438 100644 --- a/src/components/views/Ht.vue +++ b/src/components/views/Ht.vue @@ -9,7 +9,7 @@ import { TooltipContent, TooltipProvider, TooltipRoot, TooltipTrigger } from '@/ import { useTabStore } from '@/pinia/tab' import { ArrowUp, Edit3, GripVertical, MoreHorizontal, Plus, Trash2, X } from 'lucide-vue-next' import { decodeZwArchive, encodeZwArchive } from '@/lib/zwArchive' -import { majorList } from '@/sql' +import { industryTypeList } from '@/sql' import { AlertDialogAction, AlertDialogCancel, @@ -90,7 +90,7 @@ const contractListViewportRef = ref(null) const showScrollTopFab = ref(false) const isDraggingContracts = ref(false) const cardMotionState = ref<'enter' | 'ready'>('ready') -const canManageContracts = ref(false) +const canManageContracts = ref(true) let contractAutoScrollRaf = 0 let dragPointerClientY: number | null = null let cardEnterTimer: ReturnType | null = null @@ -196,10 +196,8 @@ const formatExportTimestamp = (date: Date): string => { const industryNameByCode = (() => { const map = new Map() - for (const item of Object.values(majorList as Record)) { - if (!item?.code || !item?.name) continue - if (item.code.includes('-')) continue - map.set(item.code, item.name) + for (const item of industryTypeList) { + map.set(item.id, item.name) } return map })() diff --git a/src/components/views/ServiceCheckboxSelector.vue b/src/components/views/ServiceCheckboxSelector.vue index 84d4cb1..4caa947 100644 --- a/src/components/views/ServiceCheckboxSelector.vue +++ b/src/components/views/ServiceCheckboxSelector.vue @@ -36,7 +36,7 @@ const clearAll = () => {