chore(frontend): introduce prettier + eslint and prune unused code
Backend CI / Backend (push) Has been cancelled
Frontend CI / Frontend (push) Failing after 1m39s

- Add Prettier 3 with prettier-plugin-organize-imports (sorts/removes unused imports)
- Add ESLint 10 flat config with typescript-eslint + eslint-plugin-vue + eslint-config-prettier
- Add root scripts: format, format:check, lint, lint:fix
- Reformat 257 files across admin-web, ops-web, desktop-client, packages
- Remove unused locals/exports flagged by --noUnusedLocals/--noUnusedParameters
- Fix duplicate localTabLabel key, surrogate-pair regex u-flag, NBSP literal in regex
- Skip server/ (Go) and apps/browser-extension/ (deprecated per ADR)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-01 20:39:09 +08:00
parent 21c7892ee4
commit 162abdc97c
258 changed files with 42261 additions and 37556 deletions
@@ -5,62 +5,65 @@ import {
EditOutlined,
EyeOutlined,
SendOutlined,
} from "@ant-design/icons-vue";
import { useI18n } from "vue-i18n";
} from '@ant-design/icons-vue'
import { useI18n } from 'vue-i18n'
const props = withDefaults(defineProps<{
showPublish?: boolean;
canPublish?: boolean;
publishDisabledTitle?: string;
showEdit?: boolean;
canEdit?: boolean;
editDisabledTitle?: string;
showPreview?: boolean;
canPreview?: boolean;
previewDisabledTitle?: string;
showCopy?: boolean;
canCopy?: boolean;
copyDisabledTitle?: string;
showDelete?: boolean;
canDelete?: boolean;
deleteDisabledTitle?: string;
deleteConfirmTitle?: string;
deleteLoading?: boolean;
}>(), {
showPublish: false,
canPublish: true,
publishDisabledTitle: "",
showEdit: false,
canEdit: true,
editDisabledTitle: "",
showPreview: false,
canPreview: true,
previewDisabledTitle: "",
showCopy: false,
canCopy: true,
copyDisabledTitle: "",
showDelete: true,
canDelete: true,
deleteDisabledTitle: "",
deleteConfirmTitle: "",
deleteLoading: false,
});
withDefaults(
defineProps<{
showPublish?: boolean
canPublish?: boolean
publishDisabledTitle?: string
showEdit?: boolean
canEdit?: boolean
editDisabledTitle?: string
showPreview?: boolean
canPreview?: boolean
previewDisabledTitle?: string
showCopy?: boolean
canCopy?: boolean
copyDisabledTitle?: string
showDelete?: boolean
canDelete?: boolean
deleteDisabledTitle?: string
deleteConfirmTitle?: string
deleteLoading?: boolean
}>(),
{
showPublish: false,
canPublish: true,
publishDisabledTitle: '',
showEdit: false,
canEdit: true,
editDisabledTitle: '',
showPreview: false,
canPreview: true,
previewDisabledTitle: '',
showCopy: false,
canCopy: true,
copyDisabledTitle: '',
showDelete: true,
canDelete: true,
deleteDisabledTitle: '',
deleteConfirmTitle: '',
deleteLoading: false,
},
)
const emit = defineEmits<{
publish: [];
edit: [];
preview: [];
copy: [];
delete: [];
}>();
publish: []
edit: []
preview: []
copy: []
delete: []
}>()
const { t } = useI18n();
const { t } = useI18n()
function resolveTitle(enabled: boolean, enabledTitle: string, disabledTitle?: string): string {
if (enabled) {
return enabledTitle;
return enabledTitle
}
return disabledTitle || enabledTitle;
return disabledTitle || enabledTitle
}
</script>
@@ -84,10 +87,7 @@ function resolveTitle(enabled: boolean, enabledTitle: string, disabledTitle?: st
</span>
</a-tooltip>
<a-tooltip
v-if="showEdit"
:title="resolveTitle(canEdit, t('common.edit'), editDisabledTitle)"
>
<a-tooltip v-if="showEdit" :title="resolveTitle(canEdit, t('common.edit'), editDisabledTitle)">
<span>
<a-button
type="text"
@@ -120,10 +120,7 @@ function resolveTitle(enabled: boolean, enabledTitle: string, disabledTitle?: st
</span>
</a-tooltip>
<a-tooltip
v-if="showCopy"
:title="resolveTitle(canCopy, t('common.copy'), copyDisabledTitle)"
>
<a-tooltip v-if="showCopy" :title="resolveTitle(canCopy, t('common.copy'), copyDisabledTitle)">
<span>
<a-button
type="text"