shasha пре 1 месец
родитељ
комит
9820b9c227

+ 159 - 0
snowy-admin-web/src/views/biz/bizloadpoint/timeIndex.vue

@@ -0,0 +1,159 @@
+<template>
+	<a-card :bordered="false" style="margin-bottom: 10px" class="mb-2">
+		<a-form ref="searchFormRef" name="advanced_search" :model="searchFormState" class="ant-advanced-search-form">
+			<a-row :gutter="24">
+				<a-col :span="6">
+					<a-form-item label="点位名称" name="loadPoint">
+						<a-input v-model:value="searchFormState.loadPoint" placeholder="查询点位名称" allow-clear  />
+					</a-form-item>
+				</a-col>
+				<a-col :span="9">
+					<a-form-item label="装货开始时间" name="confStartTime">
+						<a-range-picker v-model:value="searchFormState.confStartTime" value-format="YYYY-MM-DD HH:mm" show-time allow-clear  />
+					</a-form-item>
+				</a-col>
+				<a-col :span="9">
+					<a-form-item label="装货结束时间" name="confEndTime">
+						<a-range-picker v-model:value="searchFormState.confEndTime" value-format="YYYY-MM-DD HH:mm" show-time allow-clear  />
+					</a-form-item>
+				</a-col>
+			</a-row>
+			<a-row :gutter="24">
+				<a-col :span="6">
+					<a-form-item label="装货员" name="loadUser">
+						<a-input v-model:value="searchFormState.loadUser" placeholder="查询货品名称" allow-clear  />
+					</a-form-item>
+				</a-col>
+				<a-col :span="9"></a-col>
+				<a-col :span="9">
+					<a-button type="primary" @click="tableRef.refresh()">查询</a-button>
+					<a-button style="margin: 0 8px" @click="reset">重置</a-button>
+					
+					<a-button type="primary" @click="formRef.onOpen()" v-if="hasPerm('bizLoadTimeAdd')">
+						<template #icon><plus-outlined /></template>
+						新增
+					</a-button>
+				</a-col>
+			</a-row>
+		</a-form>
+	</a-card>
+	<a-card :bordered="false">
+		<s-table
+			ref="tableRef"
+			:columns="columns"
+			:data="loadData"
+			bordered
+			:row-key="(record) => record.id"
+		>
+			<template #bodyCell="{ column, record, index }">
+				<template v-if="column.dataIndex === 'serial'">
+					{{ index + 1 }}
+				</template>
+				<template v-if="column.dataIndex === 'action'">
+					<a-space>
+						<a @click="formRef.onOpen(record)" v-if="hasPerm('bizLoadTimeEdit')">编辑</a>
+						<a-divider type="vertical" v-if="hasPerm(['bizLoadTimeEdit', 'bizLoadTimeDelete'], 'and')" />
+						<a-button type="link" danger size="small" v-if="hasPerm('bizLoadTimeDelete')" @click="deleteConfig(record)">删除</a-button>
+					</a-space>
+				</template>
+			</template>
+		</s-table>
+	</a-card>
+	<Form ref="formRef" @successful="tableRef.refresh()" />
+</template>
+
+<script setup name="bizloadtime">
+	import { cloneDeep } from 'lodash-es'
+	import Form from './loadtimeform.vue'
+	import bizLoadTimeApi from '@/api/biz/bizLoadTimeApi'
+
+	const searchFormState = ref({})
+	const searchFormRef = ref()
+	const tableRef = ref()
+	const formRef = ref()
+	const toolConfig = { refresh: true, height: true, columnSetting: true, striped: false }
+	const columns = [
+		{
+			title: '装货点位',
+			dataIndex: 'loadPoint'
+		},
+		{
+			title: '装货员',
+			dataIndex: 'loadUser'
+		},
+		{
+			title: '装货时间段',
+			dataIndex: 'beginTime-endTime'
+		},
+		{
+			title: '可约次数',
+			dataIndex: 'availableNumber'
+		},
+		{
+			title: '已约次数',
+			dataIndex: 'alreadyNumber'
+		},
+	]
+	// 操作栏通过权限判断是否显示
+	if (hasPerm(['bizLoadTimeEdit', 'bizLoadTimeDelete'])) {
+		columns.push({
+			title: '操作',
+			dataIndex: 'action',
+			align: 'center',
+			width: 150
+		})
+	}
+	const selectedRowKeys = ref([])
+	// 列表选择配置
+	const options = {
+		// columns数字类型字段加入 needTotal: true 可以勾选自动算账
+		alert: {
+			show: true,
+			clear: () => {
+				selectedRowKeys.value = ref([])
+			}
+		},
+		rowSelection: {
+			onChange: (selectedRowKey, selectedRows) => {
+				selectedRowKeys.value = selectedRowKey
+			}
+		}
+	}
+	const loadData = (parameter) => {
+		const searchFormParam = cloneDeep(searchFormState.value)
+		return bizLoadTimeApi.bizLoadTimePage(Object.assign(parameter, searchFormParam)).then((data) => {
+			return data
+		})
+	}
+	// 重置
+	const reset = () => {
+		searchFormRef.value.resetFields()
+		tableRef.value.refresh(true)
+	}
+	// 删除
+	const deleteConfig = (record) => {
+		Modal.confirm({
+			title: '确定删除该数据吗?',
+			icon: createVNode(ExclamationCircleOutlined),
+			content: '',
+			onOk() {
+				submitLoading.value = true
+				let params = [
+					{
+						id: record.id
+					}
+				]
+
+				customerApi
+					.customerDelete(params)
+					.then(() => {
+						tableRef.value.refresh(true)
+					})
+					.finally(() => {
+						submitLoading.value = false
+					})
+			},
+			onCancel() {}
+		})
+	}
+</script>

+ 85 - 0
snowy-admin-web/src/views/biz/bizloadpoint/timeform.vue

@@ -0,0 +1,85 @@
+<template>
+	<xn-form-container
+		:title="formData.id ? '编辑装货时间配置' : '增加装货时间配置'"
+		:width="700"
+		v-model:open="open"
+		:destroy-on-close="true"
+		@close="onClose"
+	>
+		<a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
+			<a-form-item label="装货点位id:" name="pointId">
+				<a-input v-model:value="formData.pointId" placeholder="请输入装货点位id" allow-clear />
+			</a-form-item>
+			<a-form-item label="开始时间:" name="beginTime">
+				<a-date-picker v-model:value="formData.beginTime" value-format="YYYY-MM-DD HH:mm:ss" show-time placeholder="请选择开始时间" style="width: 100%" />
+			</a-form-item>
+			<a-form-item label="结束时间:" name="endTime">
+				<a-date-picker v-model:value="formData.endTime" value-format="YYYY-MM-DD HH:mm:ss" show-time placeholder="请选择结束时间" style="width: 100%" />
+			</a-form-item>
+			<a-form-item label="可约次数:" name="availableNumber">
+				<a-input v-model:value="formData.availableNumber" placeholder="请输入可约次数" allow-clear />
+			</a-form-item>
+			<a-form-item label="已约次数:" name="alreadyNumber">
+				<a-input v-model:value="formData.alreadyNumber" placeholder="请输入已约次数" allow-clear />
+			</a-form-item>
+		</a-form>
+		<template #footer>
+			<a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
+			<a-button type="primary" @click="onSubmit" :loading="submitLoading">保存</a-button>
+		</template>
+	</xn-form-container>
+</template>
+
+<script setup name="bizLoadTimeForm">
+	import { cloneDeep } from 'lodash-es'
+	import { required } from '@/utils/formRules'
+	import bizLoadTimeApi from '@/api/biz/bizLoadTimeApi'
+	// 抽屉状态
+	const open = ref(false)
+	const emit = defineEmits({ successful: null })
+	const formRef = ref()
+	// 表单数据
+	const formData = ref({})
+	const submitLoading = ref(false)
+
+	// 打开抽屉
+	const onOpen = (record) => {
+		open.value = true
+		if (record) {
+			let recordData = cloneDeep(record)
+			formData.value = Object.assign({}, recordData)
+		}
+	}
+	// 关闭抽屉
+	const onClose = () => {
+		formRef.value.resetFields()
+		formData.value = {}
+		open.value = false
+	}
+	// 默认要校验的
+	const formRules = {
+	}
+	// 验证并提交数据
+	const onSubmit = () => {
+		formRef.value
+			.validate()
+			.then(() => {
+				submitLoading.value = true
+				const formDataParam = cloneDeep(formData.value)
+				bizLoadTimeApi
+					.bizLoadTimeSubmitForm(formDataParam, formDataParam.id)
+					.then(() => {
+						onClose()
+						emit('successful')
+					})
+					.finally(() => {
+						submitLoading.value = false
+					})
+			})
+			.catch(() => {})
+	}
+	// 抛出函数
+	defineExpose({
+		onOpen
+	})
+</script>

+ 76 - 0
snowy-admin-web/src/views/biz/bizloadpoint/userForm.vue

@@ -0,0 +1,76 @@
+<template>
+	<xn-form-container
+		:title="formData.id ? '编辑装货点人员信息' : '增加装货点人员信息'"
+		:width="700"
+		v-model:open="open"
+		:destroy-on-close="true"
+		@close="onClose"
+	>
+		<a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
+			<a-form-item label="装货点位id:" name="loadId">
+				<a-input v-model:value="formData.loadId" placeholder="请输入装货点位id" allow-clear />
+			</a-form-item>
+			<a-form-item label="点位人员信息:" name="userId">
+				<a-input v-model:value="formData.userId" placeholder="请输入点位人员信息" allow-clear />
+			</a-form-item>
+		</a-form>
+		<template #footer>
+			<a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
+			<a-button type="primary" @click="onSubmit" :loading="submitLoading">保存</a-button>
+		</template>
+	</xn-form-container>
+</template>
+
+<script setup name="bizLoadUserForm">
+	import { cloneDeep } from 'lodash-es'
+	import { required } from '@/utils/formRules'
+	import bizLoadUserApi from '@/api/biz/bizLoadUserApi'
+	// 抽屉状态
+	const open = ref(false)
+	const emit = defineEmits({ successful: null })
+	const formRef = ref()
+	// 表单数据
+	const formData = ref({})
+	const submitLoading = ref(false)
+
+	// 打开抽屉
+	const onOpen = (record) => {
+		open.value = true
+		if (record) {
+			let recordData = cloneDeep(record)
+			formData.value = Object.assign({}, recordData)
+		}
+	}
+	// 关闭抽屉
+	const onClose = () => {
+		formRef.value.resetFields()
+		formData.value = {}
+		open.value = false
+	}
+	// 默认要校验的
+	const formRules = {
+	}
+	// 验证并提交数据
+	const onSubmit = () => {
+		formRef.value
+			.validate()
+			.then(() => {
+				submitLoading.value = true
+				const formDataParam = cloneDeep(formData.value)
+				bizLoadUserApi
+					.bizLoadUserSubmitForm(formDataParam, formDataParam.id)
+					.then(() => {
+						onClose()
+						emit('successful')
+					})
+					.finally(() => {
+						submitLoading.value = false
+					})
+			})
+			.catch(() => {})
+	}
+	// 抛出函数
+	defineExpose({
+		onOpen
+	})
+</script>

+ 124 - 0
snowy-admin-web/src/views/biz/bizloadpoint/userIndex.vue

@@ -0,0 +1,124 @@
+<template>
+	<a-card :bordered="false">
+		<s-table
+			ref="tableRef"
+			:columns="columns"
+			:data="loadData"
+			:alert="options.alert.show"
+			bordered
+			:row-key="(record) => record.id"
+			:tool-config="toolConfig"
+			:row-selection="options.rowSelection"
+		>
+			<template #operator class="table-operator">
+				<a-space>
+					<a-button type="primary" @click="formRef.onOpen()" v-if="hasPerm('bizLoadUserAdd')">
+						<template #icon><plus-outlined /></template>
+						新增
+					</a-button>
+					<xn-batch-button
+						v-if="hasPerm('bizLoadUserBatchDelete')"
+						buttonName="批量删除"
+                        icon="DeleteOutlined"
+						:selectedRowKeys="selectedRowKeys"
+						@batchCallBack="deleteBatchBizLoadUser"
+					/>
+				</a-space>
+			</template>
+			<template #bodyCell="{ column, record }">
+				<template v-if="column.dataIndex === 'action'">
+					<a-space>
+						<a @click="formRef.onOpen(record)" v-if="hasPerm('bizLoadUserEdit')">编辑</a>
+						<a-divider type="vertical" v-if="hasPerm(['bizLoadUserEdit', 'bizLoadUserDelete'], 'and')" />
+						<a-button type="link" danger size="small" v-if="hasPerm('bizLoadUserDelete')" @click="deleteConfig(record)">删除</a-button>
+					</a-space>
+				</template>
+			</template>
+		</s-table>
+	</a-card>
+	<Form ref="formRef" @successful="tableRef.refresh()" />
+</template>
+
+<script setup name="bizloaduser">
+	import { cloneDeep } from 'lodash-es'
+	import Form from './loadUserForm.vue'
+	import bizLoadUserApi from '@/api/biz/bizLoadUserApi'
+
+	const searchFormState = ref({})
+	const searchFormRef = ref()
+	const tableRef = ref()
+	const formRef = ref()
+	const toolConfig = { refresh: true, height: true, columnSetting: true, striped: false }
+	const columns = [
+		{
+			title: '装货点位id',
+			dataIndex: 'loadId'
+		},
+		{
+			title: '点位人员信息',
+			dataIndex: 'userId'
+		},
+	]
+	// 操作栏通过权限判断是否显示
+	if (hasPerm(['bizLoadUserEdit', 'bizLoadUserDelete'])) {
+		columns.push({
+			title: '操作',
+			dataIndex: 'action',
+			align: 'center',
+			width: 150
+		})
+	}
+	const selectedRowKeys = ref([])
+	// 列表选择配置
+	const options = {
+		// columns数字类型字段加入 needTotal: true 可以勾选自动算账
+		alert: {
+			show: true,
+			clear: () => {
+				selectedRowKeys.value = ref([])
+			}
+		},
+		rowSelection: {
+			onChange: (selectedRowKey, selectedRows) => {
+				selectedRowKeys.value = selectedRowKey
+			}
+		}
+	}
+	const loadData = (parameter) => {
+		const searchFormParam = cloneDeep(searchFormState.value)
+		return bizLoadUserApi.bizLoadUserPage(Object.assign(parameter, searchFormParam)).then((data) => {
+			return data
+		})
+	}
+	// 重置
+	const reset = () => {
+		searchFormRef.value.resetFields()
+		tableRef.value.refresh(true)
+	}
+	// 删除
+	const deleteConfig = (record) => {
+		Modal.confirm({
+			title: '确定删除该数据吗?',
+			icon: createVNode(ExclamationCircleOutlined),
+			content: '',
+			onOk() {
+				submitLoading.value = true
+				let params = [
+					{
+						id: record.id
+					}
+				]
+
+				customerApi
+					.customerDelete(params)
+					.then(() => {
+						tableRef.value.refresh(true)
+					})
+					.finally(() => {
+						submitLoading.value = false
+					})
+			},
+			onCancel() {}
+		})
+	}
+</script>

+ 159 - 0
snowy-admin-web/src/views/biz/bizloadtime/loadtimeIndex.vue

@@ -0,0 +1,159 @@
+<template>
+	<a-card :bordered="false" style="margin-bottom: 10px" class="mb-2">
+		<a-form ref="searchFormRef" name="advanced_search" :model="searchFormState" class="ant-advanced-search-form">
+			<a-row :gutter="24">
+				<a-col :span="6">
+					<a-form-item label="点位名称" name="loadPoint">
+						<a-input v-model:value="searchFormState.loadPoint" placeholder="查询点位名称" allow-clear  />
+					</a-form-item>
+				</a-col>
+				<a-col :span="9">
+					<a-form-item label="装货开始时间" name="confStartTime">
+						<a-range-picker v-model:value="searchFormState.confStartTime" value-format="YYYY-MM-DD HH:mm" show-time allow-clear  />
+					</a-form-item>
+				</a-col>
+				<a-col :span="9">
+					<a-form-item label="装货结束时间" name="confEndTime">
+						<a-range-picker v-model:value="searchFormState.confEndTime" value-format="YYYY-MM-DD HH:mm" show-time allow-clear  />
+					</a-form-item>
+				</a-col>
+			</a-row>
+			<a-row :gutter="24">
+				<a-col :span="6">
+					<a-form-item label="装货员" name="loadUser">
+						<a-input v-model:value="searchFormState.loadUser" placeholder="查询货品名称" allow-clear  />
+					</a-form-item>
+				</a-col>
+				<a-col :span="9"></a-col>
+				<a-col :span="9">
+					<a-button type="primary" @click="tableRef.refresh()">查询</a-button>
+					<a-button style="margin: 0 8px" @click="reset">重置</a-button>
+					
+					<a-button type="primary" @click="formRef.onOpen()" v-if="hasPerm('bizLoadTimeAdd')">
+						<template #icon><plus-outlined /></template>
+						新增
+					</a-button>
+				</a-col>
+			</a-row>
+		</a-form>
+	</a-card>
+	<a-card :bordered="false">
+		<s-table
+			ref="tableRef"
+			:columns="columns"
+			:data="loadData"
+			bordered
+			:row-key="(record) => record.id"
+		>
+			<template #bodyCell="{ column, record, index }">
+				<template v-if="column.dataIndex === 'serial'">
+					{{ index + 1 }}
+				</template>
+				<template v-if="column.dataIndex === 'action'">
+					<a-space>
+						<a @click="formRef.onOpen(record)" v-if="hasPerm('bizLoadTimeEdit')">编辑</a>
+						<a-divider type="vertical" v-if="hasPerm(['bizLoadTimeEdit', 'bizLoadTimeDelete'], 'and')" />
+						<a-button type="link" danger size="small" v-if="hasPerm('bizLoadTimeDelete')" @click="deleteConfig(record)">删除</a-button>
+					</a-space>
+				</template>
+			</template>
+		</s-table>
+	</a-card>
+	<Form ref="formRef" @successful="tableRef.refresh()" />
+</template>
+
+<script setup name="bizloadtime">
+	import { cloneDeep } from 'lodash-es'
+	import Form from './loadtimeform.vue'
+	import bizLoadTimeApi from '@/api/biz/bizLoadTimeApi'
+
+	const searchFormState = ref({})
+	const searchFormRef = ref()
+	const tableRef = ref()
+	const formRef = ref()
+	const toolConfig = { refresh: true, height: true, columnSetting: true, striped: false }
+	const columns = [
+		{
+			title: '装货点位',
+			dataIndex: 'loadPoint'
+		},
+		{
+			title: '装货员',
+			dataIndex: 'loadUser'
+		},
+		{
+			title: '装货时间段',
+			dataIndex: 'beginTime-endTime'
+		},
+		{
+			title: '可约次数',
+			dataIndex: 'availableNumber'
+		},
+		{
+			title: '已约次数',
+			dataIndex: 'alreadyNumber'
+		},
+	]
+	// 操作栏通过权限判断是否显示
+	if (hasPerm(['bizLoadTimeEdit', 'bizLoadTimeDelete'])) {
+		columns.push({
+			title: '操作',
+			dataIndex: 'action',
+			align: 'center',
+			width: 150
+		})
+	}
+	const selectedRowKeys = ref([])
+	// 列表选择配置
+	const options = {
+		// columns数字类型字段加入 needTotal: true 可以勾选自动算账
+		alert: {
+			show: true,
+			clear: () => {
+				selectedRowKeys.value = ref([])
+			}
+		},
+		rowSelection: {
+			onChange: (selectedRowKey, selectedRows) => {
+				selectedRowKeys.value = selectedRowKey
+			}
+		}
+	}
+	const loadData = (parameter) => {
+		const searchFormParam = cloneDeep(searchFormState.value)
+		return bizLoadTimeApi.bizLoadTimePage(Object.assign(parameter, searchFormParam)).then((data) => {
+			return data
+		})
+	}
+	// 重置
+	const reset = () => {
+		searchFormRef.value.resetFields()
+		tableRef.value.refresh(true)
+	}
+	// 删除
+	const deleteConfig = (record) => {
+		Modal.confirm({
+			title: '确定删除该数据吗?',
+			icon: createVNode(ExclamationCircleOutlined),
+			content: '',
+			onOk() {
+				submitLoading.value = true
+				let params = [
+					{
+						id: record.id
+					}
+				]
+
+				customerApi
+					.customerDelete(params)
+					.then(() => {
+						tableRef.value.refresh(true)
+					})
+					.finally(() => {
+						submitLoading.value = false
+					})
+			},
+			onCancel() {}
+		})
+	}
+</script>

+ 85 - 0
snowy-admin-web/src/views/biz/bizloadtime/loadtimeform.vue

@@ -0,0 +1,85 @@
+<template>
+	<xn-form-container
+		:title="formData.id ? '编辑装货时间配置' : '增加装货时间配置'"
+		:width="700"
+		v-model:open="open"
+		:destroy-on-close="true"
+		@close="onClose"
+	>
+		<a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
+			<a-form-item label="装货点位id:" name="pointId">
+				<a-input v-model:value="formData.pointId" placeholder="请输入装货点位id" allow-clear />
+			</a-form-item>
+			<a-form-item label="开始时间:" name="beginTime">
+				<a-date-picker v-model:value="formData.beginTime" value-format="YYYY-MM-DD HH:mm:ss" show-time placeholder="请选择开始时间" style="width: 100%" />
+			</a-form-item>
+			<a-form-item label="结束时间:" name="endTime">
+				<a-date-picker v-model:value="formData.endTime" value-format="YYYY-MM-DD HH:mm:ss" show-time placeholder="请选择结束时间" style="width: 100%" />
+			</a-form-item>
+			<a-form-item label="可约次数:" name="availableNumber">
+				<a-input v-model:value="formData.availableNumber" placeholder="请输入可约次数" allow-clear />
+			</a-form-item>
+			<a-form-item label="已约次数:" name="alreadyNumber">
+				<a-input v-model:value="formData.alreadyNumber" placeholder="请输入已约次数" allow-clear />
+			</a-form-item>
+		</a-form>
+		<template #footer>
+			<a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
+			<a-button type="primary" @click="onSubmit" :loading="submitLoading">保存</a-button>
+		</template>
+	</xn-form-container>
+</template>
+
+<script setup name="bizLoadTimeForm">
+	import { cloneDeep } from 'lodash-es'
+	import { required } from '@/utils/formRules'
+	import bizLoadTimeApi from '@/api/biz/bizLoadTimeApi'
+	// 抽屉状态
+	const open = ref(false)
+	const emit = defineEmits({ successful: null })
+	const formRef = ref()
+	// 表单数据
+	const formData = ref({})
+	const submitLoading = ref(false)
+
+	// 打开抽屉
+	const onOpen = (record) => {
+		open.value = true
+		if (record) {
+			let recordData = cloneDeep(record)
+			formData.value = Object.assign({}, recordData)
+		}
+	}
+	// 关闭抽屉
+	const onClose = () => {
+		formRef.value.resetFields()
+		formData.value = {}
+		open.value = false
+	}
+	// 默认要校验的
+	const formRules = {
+	}
+	// 验证并提交数据
+	const onSubmit = () => {
+		formRef.value
+			.validate()
+			.then(() => {
+				submitLoading.value = true
+				const formDataParam = cloneDeep(formData.value)
+				bizLoadTimeApi
+					.bizLoadTimeSubmitForm(formDataParam, formDataParam.id)
+					.then(() => {
+						onClose()
+						emit('successful')
+					})
+					.finally(() => {
+						submitLoading.value = false
+					})
+			})
+			.catch(() => {})
+	}
+	// 抛出函数
+	defineExpose({
+		onOpen
+	})
+</script>

+ 76 - 0
snowy-admin-web/src/views/biz/bizloaduser/loadUserForm.vue

@@ -0,0 +1,76 @@
+<template>
+	<xn-form-container
+		:title="formData.id ? '编辑装货点人员信息' : '增加装货点人员信息'"
+		:width="700"
+		v-model:open="open"
+		:destroy-on-close="true"
+		@close="onClose"
+	>
+		<a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
+			<a-form-item label="装货点位id:" name="loadId">
+				<a-input v-model:value="formData.loadId" placeholder="请输入装货点位id" allow-clear />
+			</a-form-item>
+			<a-form-item label="点位人员信息:" name="userId">
+				<a-input v-model:value="formData.userId" placeholder="请输入点位人员信息" allow-clear />
+			</a-form-item>
+		</a-form>
+		<template #footer>
+			<a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
+			<a-button type="primary" @click="onSubmit" :loading="submitLoading">保存</a-button>
+		</template>
+	</xn-form-container>
+</template>
+
+<script setup name="bizLoadUserForm">
+	import { cloneDeep } from 'lodash-es'
+	import { required } from '@/utils/formRules'
+	import bizLoadUserApi from '@/api/biz/bizLoadUserApi'
+	// 抽屉状态
+	const open = ref(false)
+	const emit = defineEmits({ successful: null })
+	const formRef = ref()
+	// 表单数据
+	const formData = ref({})
+	const submitLoading = ref(false)
+
+	// 打开抽屉
+	const onOpen = (record) => {
+		open.value = true
+		if (record) {
+			let recordData = cloneDeep(record)
+			formData.value = Object.assign({}, recordData)
+		}
+	}
+	// 关闭抽屉
+	const onClose = () => {
+		formRef.value.resetFields()
+		formData.value = {}
+		open.value = false
+	}
+	// 默认要校验的
+	const formRules = {
+	}
+	// 验证并提交数据
+	const onSubmit = () => {
+		formRef.value
+			.validate()
+			.then(() => {
+				submitLoading.value = true
+				const formDataParam = cloneDeep(formData.value)
+				bizLoadUserApi
+					.bizLoadUserSubmitForm(formDataParam, formDataParam.id)
+					.then(() => {
+						onClose()
+						emit('successful')
+					})
+					.finally(() => {
+						submitLoading.value = false
+					})
+			})
+			.catch(() => {})
+	}
+	// 抛出函数
+	defineExpose({
+		onOpen
+	})
+</script>

+ 124 - 0
snowy-admin-web/src/views/biz/bizloaduser/loadUserIndex.vue

@@ -0,0 +1,124 @@
+<template>
+	<a-card :bordered="false">
+		<s-table
+			ref="tableRef"
+			:columns="columns"
+			:data="loadData"
+			:alert="options.alert.show"
+			bordered
+			:row-key="(record) => record.id"
+			:tool-config="toolConfig"
+			:row-selection="options.rowSelection"
+		>
+			<template #operator class="table-operator">
+				<a-space>
+					<a-button type="primary" @click="formRef.onOpen()" v-if="hasPerm('bizLoadUserAdd')">
+						<template #icon><plus-outlined /></template>
+						新增
+					</a-button>
+					<xn-batch-button
+						v-if="hasPerm('bizLoadUserBatchDelete')"
+						buttonName="批量删除"
+                        icon="DeleteOutlined"
+						:selectedRowKeys="selectedRowKeys"
+						@batchCallBack="deleteBatchBizLoadUser"
+					/>
+				</a-space>
+			</template>
+			<template #bodyCell="{ column, record }">
+				<template v-if="column.dataIndex === 'action'">
+					<a-space>
+						<a @click="formRef.onOpen(record)" v-if="hasPerm('bizLoadUserEdit')">编辑</a>
+						<a-divider type="vertical" v-if="hasPerm(['bizLoadUserEdit', 'bizLoadUserDelete'], 'and')" />
+						<a-button type="link" danger size="small" v-if="hasPerm('bizLoadUserDelete')" @click="deleteConfig(record)">删除</a-button>
+					</a-space>
+				</template>
+			</template>
+		</s-table>
+	</a-card>
+	<Form ref="formRef" @successful="tableRef.refresh()" />
+</template>
+
+<script setup name="bizloaduser">
+	import { cloneDeep } from 'lodash-es'
+	import Form from './loadUserForm.vue'
+	import bizLoadUserApi from '@/api/biz/bizLoadUserApi'
+
+	const searchFormState = ref({})
+	const searchFormRef = ref()
+	const tableRef = ref()
+	const formRef = ref()
+	const toolConfig = { refresh: true, height: true, columnSetting: true, striped: false }
+	const columns = [
+		{
+			title: '装货点位id',
+			dataIndex: 'loadId'
+		},
+		{
+			title: '点位人员信息',
+			dataIndex: 'userId'
+		},
+	]
+	// 操作栏通过权限判断是否显示
+	if (hasPerm(['bizLoadUserEdit', 'bizLoadUserDelete'])) {
+		columns.push({
+			title: '操作',
+			dataIndex: 'action',
+			align: 'center',
+			width: 150
+		})
+	}
+	const selectedRowKeys = ref([])
+	// 列表选择配置
+	const options = {
+		// columns数字类型字段加入 needTotal: true 可以勾选自动算账
+		alert: {
+			show: true,
+			clear: () => {
+				selectedRowKeys.value = ref([])
+			}
+		},
+		rowSelection: {
+			onChange: (selectedRowKey, selectedRows) => {
+				selectedRowKeys.value = selectedRowKey
+			}
+		}
+	}
+	const loadData = (parameter) => {
+		const searchFormParam = cloneDeep(searchFormState.value)
+		return bizLoadUserApi.bizLoadUserPage(Object.assign(parameter, searchFormParam)).then((data) => {
+			return data
+		})
+	}
+	// 重置
+	const reset = () => {
+		searchFormRef.value.resetFields()
+		tableRef.value.refresh(true)
+	}
+	// 删除
+	const deleteConfig = (record) => {
+		Modal.confirm({
+			title: '确定删除该数据吗?',
+			icon: createVNode(ExclamationCircleOutlined),
+			content: '',
+			onOk() {
+				submitLoading.value = true
+				let params = [
+					{
+						id: record.id
+					}
+				]
+
+				customerApi
+					.customerDelete(params)
+					.then(() => {
+						tableRef.value.refresh(true)
+					})
+					.finally(() => {
+						submitLoading.value = false
+					})
+			},
+			onCancel() {}
+		})
+	}
+</script>