feat(safety): support full CRUD for approved commercial places and dynamic sync to uniapp
这个提交包含在:
@@ -58,14 +58,28 @@
|
||||
</a-table-column>
|
||||
<a-table-column title="营业状态" :width="120">
|
||||
<template #cell="{ record }">
|
||||
<a-badge status="success" :text="record.status" />
|
||||
<a-badge :status="record.status === '正常营业' ? 'success' : 'danger'" :text="record.status" />
|
||||
</template>
|
||||
</a-table-column>
|
||||
<a-table-column title="准入状态" :width="130">
|
||||
<a-table-column title="准入状态" :width="110">
|
||||
<template #cell="{ record }">
|
||||
<a-tag color="blue">白名单准入</a-tag>
|
||||
</template>
|
||||
</a-table-column>
|
||||
<a-table-column title="管理操作" :width="160" align="center">
|
||||
<template #cell="{ record }">
|
||||
<a-space>
|
||||
<a-button type="text" size="small" @click="openEditModal(record)">
|
||||
编辑
|
||||
</a-button>
|
||||
<a-popconfirm content="确定要从合规白名单库中移除该场所吗?" @ok="handleDelete(record.id)">
|
||||
<a-button type="text" status="danger" size="small">
|
||||
移除
|
||||
</a-button>
|
||||
</a-popconfirm>
|
||||
</a-space>
|
||||
</template>
|
||||
</a-table-column>
|
||||
</template>
|
||||
</a-table>
|
||||
</a-card>
|
||||
@@ -94,6 +108,37 @@
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-modal>
|
||||
|
||||
<!-- 编辑场所 Modal -->
|
||||
<a-modal
|
||||
v-model:visible="editModalVisible"
|
||||
title="编辑合规商圈场所"
|
||||
@ok="handleEditSubmit"
|
||||
@cancel="editModalVisible = false"
|
||||
>
|
||||
<a-form :model="editForm" layout="vertical">
|
||||
<a-form-item label="场所实体名称" required>
|
||||
<a-input v-model="editForm.name" placeholder="如:三里屯太二酸菜鱼、工体纯KTV" />
|
||||
</a-form-item>
|
||||
<a-form-item label="所属公开商圈" required>
|
||||
<a-input v-model="editForm.area" placeholder="如:朝阳区三里屯商圈、海淀中关村商圈" />
|
||||
</a-form-item>
|
||||
<a-form-item label="场所业态类别" required>
|
||||
<a-select v-model="editForm.category">
|
||||
<a-option value="餐饮美食">餐饮美食</a-option>
|
||||
<a-option value="量贩KTV">量贩KTV</a-option>
|
||||
<a-option value="商圈清吧">商圈清吧</a-option>
|
||||
<a-option value="电竞赛馆">电竞赛馆</a-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="营业状态" required>
|
||||
<a-select v-model="editForm.status">
|
||||
<a-option value="正常营业">正常营业</a-option>
|
||||
<a-option value="暂停营业">暂停营业</a-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-modal>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -162,7 +207,53 @@
|
||||
addModalVisible.value = false;
|
||||
fetchData();
|
||||
} catch (err: any) {
|
||||
Message.error(err.message || '录入失败');
|
||||
Message.error(err.response?.data?.message || err.message || '录入失败');
|
||||
}
|
||||
};
|
||||
|
||||
// 编辑弹窗
|
||||
const editModalVisible = ref(false);
|
||||
const currentEditId = ref('');
|
||||
const editForm = ref({
|
||||
name: '',
|
||||
area: '',
|
||||
category: '餐饮美食',
|
||||
status: '正常营业',
|
||||
});
|
||||
|
||||
const openEditModal = (record: any) => {
|
||||
currentEditId.value = record.id;
|
||||
editForm.value = {
|
||||
name: record.name,
|
||||
area: record.area,
|
||||
category: record.category,
|
||||
status: record.status,
|
||||
};
|
||||
editModalVisible.value = true;
|
||||
};
|
||||
|
||||
const handleEditSubmit = async () => {
|
||||
if (!editForm.value.name || !editForm.value.area) {
|
||||
Message.warning('请填写完整的场所名称与商圈信息');
|
||||
return;
|
||||
}
|
||||
try {
|
||||
await axios.put(`/api/safety/places/${currentEditId.value}`, editForm.value);
|
||||
Message.success('场所信息修改成功');
|
||||
editModalVisible.value = false;
|
||||
fetchData();
|
||||
} catch (err: any) {
|
||||
Message.error(err.response?.data?.message || err.message || '修改失败');
|
||||
}
|
||||
};
|
||||
|
||||
const handleDelete = async (id: string) => {
|
||||
try {
|
||||
await axios.delete(`/api/safety/places/${id}`);
|
||||
Message.success('场所已从合规库中移除');
|
||||
fetchData();
|
||||
} catch (err: any) {
|
||||
Message.error(err.response?.data?.message || err.message || '移除失败');
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
在新工单中引用
屏蔽一个用户