|
@@ -14,7 +14,7 @@
|
|
|
<!-- <Tooltip v-show="selectedIds && !selectedIds.length" title="请先勾选"> -->
|
|
|
<a-button
|
|
|
@click="handleAddLabel"
|
|
|
- style="position: absolute; left: 0px"
|
|
|
+ style="position: absolute; left: 0"
|
|
|
:disabled="selectedIds && !selectedIds.length"
|
|
|
>
|
|
|
+ 增加标签
|
|
@@ -37,6 +37,10 @@
|
|
|
<TableAction
|
|
|
:actions="[
|
|
|
{
|
|
|
+ label: t('common.edit'),
|
|
|
+ onClick: handleEdit.bind(null, record),
|
|
|
+ },
|
|
|
+ {
|
|
|
label: record.isInBlockList == true ? '转 AI' : '转人工',
|
|
|
onClick: handleIsInBlockList.bind(null, record),
|
|
|
},
|
|
@@ -45,8 +49,8 @@
|
|
|
onClick: handleMsg.bind(null, record),
|
|
|
},
|
|
|
{
|
|
|
- label: '编辑',
|
|
|
- onClick: handleEdit.bind(null, record),
|
|
|
+ label: '编辑标签',
|
|
|
+ onClick: handleEditLabel.bind(null, record),
|
|
|
},
|
|
|
// {
|
|
|
// icon: 'ant-design:delete-outlined',
|
|
@@ -87,15 +91,14 @@
|
|
|
</Modal>
|
|
|
<GroupLabelDrawer @register="registerGroupLabelDrawer" @success="handleSuccess" />
|
|
|
<ContactDrawer @register="registerDrawer" @success="handleSuccess" />
|
|
|
- <SendMsgDrawer @register="registerDrawerMsg" @success="handleSuccess1" />
|
|
|
+ <SendMsgDrawer @register="registerDrawerMsg" @success="handleSuccess" />
|
|
|
</div>
|
|
|
</template>
|
|
|
-<script lang="ts">
|
|
|
- import { createVNode, defineComponent, ref, onMounted, reactive } from 'vue';
|
|
|
- import { Modal, Form, FormItem, Select, message ,Tooltip} from 'ant-design-vue';
|
|
|
+<script lang="ts" setup>
|
|
|
+ import { createVNode, ref, onMounted, reactive } from 'vue';
|
|
|
+ import { Modal, Form, FormItem, Select, message } from 'ant-design-vue';
|
|
|
import { ExclamationCircleOutlined } from '@ant-design/icons-vue/lib/icons';
|
|
|
import { BasicTable, useTable, TableAction } from '@/components/Table';
|
|
|
- import { Button } from '@/components/Button';
|
|
|
|
|
|
import { getLabelSelectList } from '@/api/wechat/label';
|
|
|
import { useDrawer } from '@/components/Drawer';
|
|
@@ -108,227 +111,178 @@
|
|
|
import {
|
|
|
getContactList,
|
|
|
deleteContact,
|
|
|
- updateContactLabels,
|
|
|
+ updateBatchContactLabels,
|
|
|
changeBlockList
|
|
|
} from '@/api/wechat/contact';
|
|
|
|
|
|
- export default defineComponent({
|
|
|
- name: 'ContactManagement',
|
|
|
- components: {
|
|
|
- BasicTable,
|
|
|
- SendMsgDrawer,
|
|
|
- ContactDrawer,
|
|
|
- GroupLabelDrawer,
|
|
|
- TableAction,
|
|
|
- Button,
|
|
|
- Modal,
|
|
|
- Select,
|
|
|
- Form,
|
|
|
- FormItem,
|
|
|
- Tooltip,
|
|
|
+ const { t } = useI18n();
|
|
|
+ // const selectedIds = ref<number[] | string[]>();
|
|
|
+ const selectedIds = ref([]);
|
|
|
+ const showDeleteButton = ref<boolean>(false);
|
|
|
+ const modalVisible = ref(false);
|
|
|
+ const modal_title = ref('增加标签');
|
|
|
+ const form = reactive({
|
|
|
+ lableName: [],
|
|
|
+ });
|
|
|
+ const initialForm = reactive({
|
|
|
+ lableName: [],
|
|
|
+ });
|
|
|
+ const actionLabel = ref([]);
|
|
|
+
|
|
|
+ const [registerGroupLabelDrawer, { openDrawer: openGroupLabelDrawer, }] = useDrawer();
|
|
|
+ const [registerDrawer, { openDrawer }] = useDrawer();
|
|
|
+ const [registerDrawerMsg, { openDrawer: openDrawerMsg }] = useDrawer();
|
|
|
+ const [registerTable, { reload ,clearSelectedRowKeys}] = useTable({
|
|
|
+ title: t('wechat.contact.contactList'),
|
|
|
+ api: getContactList,
|
|
|
+ columns,
|
|
|
+ formConfig: {
|
|
|
+ labelWidth: 120,
|
|
|
+ schemas: searchFormSchema,
|
|
|
+ },
|
|
|
+ useSearchForm: true,
|
|
|
+ showTableSetting: true,
|
|
|
+ bordered: false,
|
|
|
+ showIndexColumn: false,
|
|
|
+ clickToRowSelect: false,
|
|
|
+ actionColumn: {
|
|
|
+ width: 280,
|
|
|
+ title: t('common.action'),
|
|
|
+ dataIndex: 'action',
|
|
|
+ fixed: 'right',
|
|
|
+ },
|
|
|
+ rowKey: 'id',
|
|
|
+ rowSelection: {
|
|
|
+ type: 'checkbox',
|
|
|
+ onChange: (selectedRowKeys, _selectedRows) => {
|
|
|
+ selectedIds.value = selectedRowKeys as number[];
|
|
|
+ showDeleteButton.value = selectedRowKeys.length > 0;
|
|
|
+ },
|
|
|
},
|
|
|
- setup() {
|
|
|
- const { t } = useI18n();
|
|
|
- // const selectedIds = ref<number[] | string[]>();
|
|
|
- const selectedIds = ref([]);
|
|
|
- const showDeleteButton = ref<boolean>(false);
|
|
|
- const modalVisible = ref(false);
|
|
|
- const modal_title = ref('增加标签');
|
|
|
- const form = reactive({
|
|
|
- lableName: [],
|
|
|
- });
|
|
|
- const initialForm = reactive({
|
|
|
- lableName: [],
|
|
|
- });
|
|
|
- const actionLabel = ref([]);
|
|
|
+ });
|
|
|
|
|
|
- const [registerGroupLabelDrawer, { openGroupLabelDrawer }] = useDrawer();
|
|
|
- const [registerDrawer, { openDrawer }] = useDrawer();
|
|
|
- const [registerDrawerMsg, { openDrawerMsg }] = useDrawer();
|
|
|
- const [registerTable, { reload ,clearSelectedRowKeys}] = useTable({
|
|
|
- title: t('wechat.contact.contactList'),
|
|
|
- api: getContactList,
|
|
|
- columns,
|
|
|
- formConfig: {
|
|
|
- labelWidth: 120,
|
|
|
- schemas: searchFormSchema,
|
|
|
- },
|
|
|
- useSearchForm: true,
|
|
|
- showTableSetting: true,
|
|
|
- bordered: false,
|
|
|
- showIndexColumn: false,
|
|
|
- clickToRowSelect: false,
|
|
|
- actionColumn: {
|
|
|
- width: 80,
|
|
|
- title: t('common.action'),
|
|
|
- dataIndex: 'action',
|
|
|
- fixed: undefined,
|
|
|
- },
|
|
|
- rowKey: 'id',
|
|
|
- rowSelection: {
|
|
|
- type: 'checkbox',
|
|
|
- onChange: (selectedRowKeys, _selectedRows) => {
|
|
|
- selectedIds.value = selectedRowKeys as number[];
|
|
|
- showDeleteButton.value = selectedRowKeys.length > 0;
|
|
|
- },
|
|
|
- },
|
|
|
- });
|
|
|
+ onMounted(async () => {
|
|
|
+ let res = await getLabelSelectList({ page: 1, pageSize: 1000, type: 1 });
|
|
|
+ actionLabel.value = res.data;
|
|
|
+ });
|
|
|
+ function handleCreate() {
|
|
|
+ openDrawer(true, {
|
|
|
+ isUpdate: false,
|
|
|
+ });
|
|
|
+ }
|
|
|
+ async function handleAddLabel() {
|
|
|
+ modalVisible.value = true;
|
|
|
+ modal_title.value = '增加标签';
|
|
|
+ }
|
|
|
|
|
|
- onMounted(async () => {
|
|
|
- let res = await getLabelSelectList({ page: 1, pageSize: 1000, type: 1 });
|
|
|
- actionLabel.value = res.data;
|
|
|
- });
|
|
|
- function handleCreate() {
|
|
|
- openDrawer(true, {
|
|
|
- isUpdate: false,
|
|
|
- });
|
|
|
- }
|
|
|
- async function handleAddLabel() {
|
|
|
- modalVisible.value = true;
|
|
|
- modal_title.value = '增加标签';
|
|
|
- }
|
|
|
+ function handleDeleteLabel() {
|
|
|
|
|
|
- function handleDeleteLabel() {
|
|
|
+ modalVisible.value = true;
|
|
|
+ modal_title.value = '移除标签';
|
|
|
+ }
|
|
|
|
|
|
- modalVisible.value = true;
|
|
|
- modal_title.value = '移除标签';
|
|
|
- }
|
|
|
+ function handleEdit(record: Recordable) {
|
|
|
+ openDrawer(true, {
|
|
|
+ record,
|
|
|
+ isUpdate: true,
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
- function handleEdit(record: Recordable) {
|
|
|
- if (record.type == 1) {
|
|
|
- openDrawer(true, {
|
|
|
- record,
|
|
|
- isUpdate: true,
|
|
|
- });
|
|
|
- } else {
|
|
|
- openGroupLabelDrawer(true, {
|
|
|
- record,
|
|
|
- isUpdate: true,
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
- function handleMsg(record: Recordable) {
|
|
|
- openDrawerMsg(true, {
|
|
|
- record,
|
|
|
- });
|
|
|
- }
|
|
|
+ function handleEditLabel(record: Recordable) {
|
|
|
+ openGroupLabelDrawer(true, {
|
|
|
+ record,
|
|
|
+ isUpdate: true,
|
|
|
+ });
|
|
|
+ }
|
|
|
+ function handleMsg(record: Recordable) {
|
|
|
+ openDrawerMsg(true, {
|
|
|
+ record,
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
- async function handleIsInBlockList(record: Recordable) {
|
|
|
- const result = await changeBlockList({ ownerWxid: record.wxWxid, wxid: record.wxid, type: record.type, ai: record.isInBlockList });
|
|
|
- if (result.code === 0) {
|
|
|
- await reload();
|
|
|
- }
|
|
|
- }
|
|
|
+ async function handleIsInBlockList(record: Recordable) {
|
|
|
+ const result = await changeBlockList({ ownerWxid: record.wxWxid, wxid: record.wxid, type: record.type, ai: record.isInBlockList });
|
|
|
+ if (result.code === 0) {
|
|
|
+ await reload();
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- async function handleDelete(record: Recordable) {
|
|
|
- const result = await deleteContact({ ids: [record.id] });
|
|
|
+ async function handleDelete(record: Recordable) {
|
|
|
+ const result = await deleteContact({ ids: [record.id] });
|
|
|
+ if (result.code === 0) {
|
|
|
+ await reload();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async function handleBatchDelete() {
|
|
|
+ Modal.confirm({
|
|
|
+ title: t('common.deleteConfirm'),
|
|
|
+ icon: createVNode(ExclamationCircleOutlined),
|
|
|
+ async onOk() {
|
|
|
+ const result = await deleteContact({ ids: selectedIds.value as number[] });
|
|
|
if (result.code === 0) {
|
|
|
+ showDeleteButton.value = false;
|
|
|
await reload();
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- async function handleBatchDelete() {
|
|
|
- Modal.confirm({
|
|
|
- title: t('common.deleteConfirm'),
|
|
|
- icon: createVNode(ExclamationCircleOutlined),
|
|
|
- async onOk() {
|
|
|
- const result = await deleteContact({ ids: selectedIds.value as number[] });
|
|
|
- if (result.code === 0) {
|
|
|
- showDeleteButton.value = false;
|
|
|
- await reload();
|
|
|
- }
|
|
|
- },
|
|
|
- onCancel() {
|
|
|
- console.log('Cancel');
|
|
|
- },
|
|
|
- });
|
|
|
- }
|
|
|
+ },
|
|
|
+ onCancel() {
|
|
|
+ console.log('Cancel');
|
|
|
+ },
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
- async function handleSuccess() {
|
|
|
+ async function handleSuccess() {
|
|
|
+ await reload();
|
|
|
+ }
|
|
|
+ async function handleOk() {
|
|
|
+ let contactIds = selectedIds.value as number[];
|
|
|
+ let labelIds = form.lableName;
|
|
|
+ if (modal_title.value === '增加标签') {
|
|
|
+ let res = await updateBatchContactLabels({ updateType: 1, contactIds, labelIds });
|
|
|
+ if (res.code === 0) {
|
|
|
+ message.success('标签添加成功');
|
|
|
+ modalVisible.value = false;
|
|
|
await reload();
|
|
|
+ selectedIds.value = [];
|
|
|
+ form.lableName = [];
|
|
|
+ clearSelectedRowKeys();
|
|
|
}
|
|
|
- async function handleSuccess1() {
|
|
|
+ } else {
|
|
|
+ let res = await updateBatchContactLabels({ updateType: -1, contactIds, labelIds });
|
|
|
+ if (res.code === 0) {
|
|
|
+ message.success('标签移除成功');
|
|
|
+ modalVisible.value = false;
|
|
|
await reload();
|
|
|
+ selectedIds.value = [];
|
|
|
+ form.lableName = [];
|
|
|
+ clearSelectedRowKeys();
|
|
|
}
|
|
|
- async function handleOk() {
|
|
|
- let contactIds = selectedIds.value as number[];
|
|
|
- let labelIds = form.lableName;
|
|
|
- if (modal_title.value === '增加标签') {
|
|
|
- let res = await updateContactLabels({ updateType: 1, contactIds, labelIds });
|
|
|
- if (res.code === 0) {
|
|
|
- message.success('标签添加成功');
|
|
|
- modalVisible.value = false;
|
|
|
- await reload();
|
|
|
- selectedIds.value = [];
|
|
|
- form.lableName = [];
|
|
|
- clearSelectedRowKeys();
|
|
|
- }
|
|
|
- } else {
|
|
|
- let res = await updateContactLabels({ updateType: -1, contactIds, labelIds });
|
|
|
- if (res.code === 0) {
|
|
|
- message.success('标签移除成功');
|
|
|
- modalVisible.value = false;
|
|
|
- await reload();
|
|
|
- selectedIds.value = [];
|
|
|
- form.lableName = [];
|
|
|
- clearSelectedRowKeys();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- async function handleCancel() {
|
|
|
- Object.assign(form, initialForm);
|
|
|
- }
|
|
|
- // const labelOptions = ref([]);
|
|
|
- //
|
|
|
- // async function fetchLabelList() {
|
|
|
- // const response = await getLabelList({ page: 1, pageSize: 100 });
|
|
|
- // const labels = response.data;
|
|
|
- //
|
|
|
- // labelOptions.value = labels.map((label) => {
|
|
|
- // return { label: label.name, value: label.id };
|
|
|
- // });
|
|
|
- // }
|
|
|
- //
|
|
|
- // onMounted(fetchLabelList);
|
|
|
- //
|
|
|
- // function getLabelOptions() {
|
|
|
- // return labelOptions.value;
|
|
|
- // }
|
|
|
-
|
|
|
- return {
|
|
|
- t,
|
|
|
- registerTable,
|
|
|
- registerGroupLabelDrawer,
|
|
|
- registerDrawer,
|
|
|
- registerDrawerMsg,
|
|
|
- handleCreate,
|
|
|
- handleMsg,
|
|
|
- handleIsInBlockList,
|
|
|
- handleEdit,
|
|
|
- handleDelete,
|
|
|
- handleSuccess,
|
|
|
- handleSuccess1,
|
|
|
- handleBatchDelete,
|
|
|
- showDeleteButton,
|
|
|
- handleDeleteLabel,
|
|
|
- handleAddLabel,
|
|
|
- handleOk,
|
|
|
- handleCancel,
|
|
|
- form,
|
|
|
- modalVisible,
|
|
|
- modal_title,
|
|
|
- actionLabel,
|
|
|
- selectedIds,
|
|
|
- // labelOptions,
|
|
|
- // getLabelOptions,
|
|
|
- };
|
|
|
- },
|
|
|
- });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ async function handleCancel() {
|
|
|
+ Object.assign(form, initialForm);
|
|
|
+ }
|
|
|
+ // const labelOptions = ref([]);
|
|
|
+ //
|
|
|
+ // async function fetchLabelList() {
|
|
|
+ // const response = await getLabelList({ page: 1, pageSize: 100 });
|
|
|
+ // const labels = response.data;
|
|
|
+ //
|
|
|
+ // labelOptions.value = labels.map((label) => {
|
|
|
+ // return { label: label.name, value: label.id };
|
|
|
+ // });
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // onMounted(fetchLabelList);
|
|
|
+ //
|
|
|
+ // function getLabelOptions() {
|
|
|
+ // return labelOptions.value;
|
|
|
+ // }
|
|
|
</script>
|
|
|
<style lang="less" scoped>
|
|
|
.custom-modal {
|
|
|
display: flex;
|
|
|
- justify-content: center;
|
|
|
align-items: center;
|
|
|
+ justify-content: center;
|
|
|
}
|
|
|
</style>
|