Files
yunxinwei-vue/src/views/merchant/index/components/clerk.vue
2023-08-04 13:32:43 +08:00

244 lines
5.7 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- 用户编辑弹窗 -->
<template>
<a-drawer
:width="700"
:visible="visible"
:confirm-loading="loading"
:maxable="maxAble"
:title="'成员管理'"
:body-style="{ paddingBottom: '8px' }"
@update:visible="updateVisible"
:footer="null"
>
<!-- 表格 -->
<ele-pro-table
ref="tableRef"
row-key="userId"
:columns="columns"
:datasource="datasource"
v-model:selection="selection"
:where="defaultWhere"
cache-key="proSystemUserTable"
>
<template #toolbar>
<a-space>
<!-- <UserMerchantClerk @select="onSelect" />-->
<a-input
allow-clear
v-model="userId"
@change="getUserId"
placeholder="请输入用户ID"
/>
<a-button type="primary" class="ele-btn-icon" @click="save">
<template #icon>
<plus-outlined />
</template>
<span>添加</span>
</a-button>
</a-space>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'nickname'">
<a-tooltip :title="`ID${record.userId}`">
<a-avatar
:size="30"
:src="`${record.user?.avatar}`"
style="margin-right: 4px"
>
<template #icon>
<UserOutlined />
</template>
</a-avatar>
{{ record.user?.nickname }}
</a-tooltip>
</template>
<template v-if="column.key === 'username'">
{{ record.user?.username }}
</template>
<template v-if="column.key === 'phone'">
{{ record.user?.phone }}
</template>
<template v-else-if="column.key === 'action'">
<a-space>
<a class="ele-text-danger" @click="remove(record)">移除</a>
</a-space>
</template>
</template>
</ele-pro-table>
</a-drawer>
</template>
<script lang="ts" setup>
import { ref, reactive, watch } from 'vue';
import { Form, message } from 'ant-design-vue';
import { assignObject, EleProTable } from 'ele-admin-pro';
import type {
MerchantClerk,
MerchantClerkParam
} from '@/api/merchant/clerk/model';
import {
ColumnItem,
DatasourceFunction
} from 'ele-admin-pro/es/ele-pro-table/types';
import { UserOutlined } from '@ant-design/icons-vue';
import {
addMerchantClerk,
pageMerchantClerks,
removeMerchantClerk
} from '@/api/merchant/clerk';
// import UserMerchantClerk from '@/components/UserChoose/index.vue';
const useForm = Form.useForm;
const props = defineProps<{
// 弹窗是否打开
visible: boolean;
// 修改回显的数据
data?: MerchantClerk | null;
}>();
const emit = defineEmits<{
(e: 'done'): void;
(e: 'update:visible', visible: boolean): void;
}>();
// 表格列配置
const columns = ref<ColumnItem[]>([
{
title: '姓名',
key: 'nickname',
dataIndex: 'nickname'
},
{
title: '登录账号',
key: 'username',
dataIndex: 'username'
},
{
title: '手机号',
key: 'phone',
dataIndex: 'phone'
},
{
title: '操作',
key: 'action',
align: 'center'
}
]);
// 默认搜索条件
const defaultWhere = reactive({
username: '',
nickname: ''
});
// 表格数据源
const datasource: DatasourceFunction = ({ page, limit, where, orders }) => {
where = {};
where.merchantCode = props.data?.merchantCode;
return pageMerchantClerks({ ...where, ...orders, page, limit });
};
// 表格实例
const tableRef = ref<InstanceType<typeof EleProTable> | null>(null);
/* 搜索 */
const reload = (where?: MerchantClerkParam) => {
tableRef?.value?.reload({ where: where });
};
// 用户信息
const clerk = reactive<MerchantClerk>({
clerkId: undefined,
// 商户名称
merchantName: '',
// 商户编号
merchantCode: '',
// 店员真实姓名
realName: '',
// 用户id
userId: undefined,
// 昵称
nickname: '',
// 登录账号
username: '',
// 创建时间
createTime: ''
});
// 请求状态
const loading = ref(true);
// 是否显示最大化切换按钮
const maxAble = ref(true);
// 选项卡位置
const { resetFields } = useForm(clerk);
// 选中用户
const userId = ref(undefined);
// const onSelect = (user) => {
// userId.value = user.userId;
// };
const getUserId = (e) => {
userId.value = e.target.value;
};
// 添加门店成员
const save = () => {
const data = {
merchantCode: props.data?.merchantCode,
userId: userId.value
};
addMerchantClerk(data)
.then((msg) => {
message.success(msg);
reload();
})
.catch((e) => {
loading.value = false;
message.error(e.message);
});
};
/* 删除单个 */
const remove = (row: MerchantClerk) => {
console.log(row);
const hide = message.loading('请求中..', 0);
removeMerchantClerk(row.clerkId)
.then(() => {
hide();
message.success('移除成功');
reload();
})
.catch((e) => {
hide();
message.error(e.message);
});
};
/* 更新visible */
const updateVisible = (value: boolean) => {
emit('update:visible', value);
};
watch(
() => props.visible,
(visible) => {
if (visible) {
if (props.data) {
loading.value = false;
assignObject(clerk, props.data);
reload();
}
} else {
resetFields();
}
}
);
</script>
<style lang="less">
.tab-pane {
min-height: 100px;
}
.important {
font-weight: bold;
}
</style>