fix(stats/self_input): 修复保存不入库/路由 404,补全部门与自媒体来源下拉

- 模型去掉 defaultSoftDelete=0,避免 ThinkPHP 软删过滤导致新增记录"隐形"
- 菜单 paths 改相对路径并新增「自录数据统计」目录,迁移已有菜单
- Lists/Overview 补部门关联、支持按部门筛选
- 数据权限改由 self_input_stats_view_all_roles 白名单 + DataScope 控制,
  编辑/删除完全交给按钮权限校验(移除"仅本人可改"硬限制)
- 新增 /stats.self_input/mediaSourceOptions 接口,统计页/账户消耗页/录入弹窗
  共用 useMediaSourceOptions + MediaSourceSelect,去重动态加载

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-05-22 11:47:15 +08:00
co-authored by Cursor
parent 183b6a1acf
commit bba989c0af
19 changed files with 621 additions and 130 deletions
+16 -11
View File
@@ -20,12 +20,13 @@
/>
</el-form-item>
<el-form-item label="自媒体来源" prop="media_source">
<el-input
<media-source-select
v-model="formData.media_source"
placeholder="如:抖音-账号A"
maxlength="120"
show-word-limit
:options="mediaSourceOptions"
placeholder="请选择或输入自媒体来源"
:allow-create="true"
:disabled="mode === 'edit'"
select-class="w-full"
/>
</el-form-item>
<el-form-item label="账户消耗" prop="amount">
@@ -57,11 +58,21 @@ import type { FormInstance } from 'element-plus'
import {
personalAccountCostAdd,
personalAccountCostDetail,
personalAccountCostEdit,
} from '@/api/self_input_stats'
import Popup from '@/components/popup/index.vue'
import MediaSourceSelect from './MediaSourceSelect.vue'
const props = withDefaults(
defineProps<{
mediaSourceOptions?: string[]
}>(),
{
mediaSourceOptions: () => [],
}
)
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
@@ -116,11 +127,6 @@ const setFormData = (data: Record<string, any>) => {
formData.remark = data.remark ?? ''
}
const getDetail = async (row: Record<string, any>) => {
const data = await personalAccountCostDetail({ id: row.id })
setFormData(data)
}
const handleClose = () => {
emit('close')
}
@@ -128,6 +134,5 @@ const handleClose = () => {
defineExpose({
open,
setFormData,
getDetail,
})
</script>