From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目
---
src/views/mall/trade/delivery/pickUpStore/components/StoreStaffTableSelect.vue | 264 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 264 insertions(+), 0 deletions(-)
diff --git a/src/views/mall/trade/delivery/pickUpStore/components/StoreStaffTableSelect.vue b/src/views/mall/trade/delivery/pickUpStore/components/StoreStaffTableSelect.vue
new file mode 100644
index 0000000..c5acda3
--- /dev/null
+++ b/src/views/mall/trade/delivery/pickUpStore/components/StoreStaffTableSelect.vue
@@ -0,0 +1,264 @@
+<!-- TODO 鑺嬭壙锛氳繖鍧楀悗缁娊涓嫭绔嬬殑缁勪欢鍑烘潵 -->
+<template>
+ <Dialog :title="dialogTitle" v-model="dialogVisible" width="60%">
+ <el-row :gutter="20">
+ <!-- 宸︿晶閮ㄩ棬鏍� -->
+ <el-col :span="4" :xs="24">
+ <ContentWrap class="h-1/1">
+ <DeptTree @node-click="handleDeptNodeClick" />
+ </ContentWrap>
+ </el-col>
+ <el-col :span="20" :xs="24">
+ <!-- 鎼滅储 -->
+ <ContentWrap>
+ <el-form
+ class="-mb-15px"
+ :model="queryParams"
+ ref="queryFormRef"
+ :inline="true"
+ label-width="68px"
+ >
+ <el-form-item label="鐢ㄦ埛鍚嶇О" prop="username">
+ <el-input
+ v-model="queryParams.username"
+ placeholder="璇疯緭鍏ョ敤鎴峰悕绉�"
+ clearable
+ @keyup.enter="handleQuery"
+ class="!w-240px"
+ />
+ </el-form-item>
+ <el-form-item label="鎵嬫満鍙风爜" prop="mobile">
+ <el-input
+ v-model="queryParams.mobile"
+ placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�"
+ clearable
+ @keyup.enter="handleQuery"
+ class="!w-240px"
+ />
+ </el-form-item>
+ <el-form-item label="鐘舵��" prop="status">
+ <el-select
+ v-model="queryParams.status"
+ placeholder="鐢ㄦ埛鐘舵��"
+ clearable
+ class="!w-240px"
+ >
+ <el-option
+ v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍒涘缓鏃堕棿" prop="createTime">
+ <el-date-picker
+ v-model="queryParams.createTime"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ type="datetimerange"
+ start-placeholder="寮�濮嬫棩鏈�"
+ end-placeholder="缁撴潫鏃ユ湡"
+ class="!w-240px"
+ />
+ </el-form-item>
+ <el-form-item>
+ <el-button @click="handleQuery"><Icon icon="ep:search" />鎼滅储</el-button>
+ <el-button @click="resetQuery"><Icon icon="ep:refresh" />閲嶇疆</el-button>
+ </el-form-item>
+ </el-form>
+ </ContentWrap>
+ <ContentWrap>
+ <el-table v-loading="loading" :data="list">
+ <el-table-column width="55">
+ <template #header>
+ <el-checkbox
+ v-model="isCheckAll"
+ :indeterminate="isIndeterminate"
+ @change="handleCheckAll"
+ />
+ </template>
+ <template #default="{ row }">
+ <el-checkbox
+ v-model="checkedStatus[row.id]"
+ @change="(checked: boolean) => handleCheckOne(checked, row, true)"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column label="鐢ㄦ埛缂栧彿" align="center" key="id" prop="id" />
+ <el-table-column
+ label="鐢ㄦ埛鍚嶇О"
+ align="center"
+ prop="username"
+ :show-overflow-tooltip="true"
+ />
+ <el-table-column
+ label="鐢ㄦ埛鏄电О"
+ align="center"
+ prop="nickname"
+ :show-overflow-tooltip="true"
+ />
+ <el-table-column
+ label="閮ㄩ棬"
+ align="center"
+ key="deptName"
+ prop="deptName"
+ :show-overflow-tooltip="true"
+ />
+ <el-table-column label="鎵嬫満鍙风爜" align="center" prop="mobile" width="120" />
+ <el-table-column label="鐘舵��" key="status">
+ <template #default="scope">
+ <dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="鍒涘缓鏃堕棿"
+ align="center"
+ prop="createTime"
+ :formatter="dateFormatter"
+ width="180"
+ />
+ </el-table>
+ <Pagination
+ :total="total"
+ v-model:page="queryParams.pageNo"
+ v-model:limit="queryParams.pageSize"
+ @pagination="getList"
+ />
+ </ContentWrap>
+ </el-col>
+ </el-row>
+ <template #footer>
+ <el-button type="primary" @click="handleEmitChange">纭� 瀹�</el-button>
+ <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
+ </template>
+ </Dialog>
+</template>
+<script lang="ts" setup>
+import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
+import { dateFormatter } from '@/utils/formatTime'
+import * as UserApi from '@/api/system/user'
+import DeptTree from '@/views/system/user/DeptTree.vue'
+
+// 鏄惁鍏ㄩ��
+const isCheckAll = ref(false)
+// 鍏ㄩ�夋鏄惁澶勪簬涓棿鐘舵�侊細涓嶆槸鍏ㄩ儴閫変腑 && 浠绘剰涓�涓�変腑
+const isIndeterminate = ref(false)
+// 閫変腑鐨勬椿鍔�
+const checkedUsers = ref([])
+// 閫変腑鐘舵�侊細key涓虹敤鎴稩D锛寁alue涓烘槸鍚﹂�変腑
+const checkedStatus = ref<Record<string, boolean>>({})
+
+const dialogTitle = '閫夋嫨搴楀憳'
+const dialogVisible = ref(false)
+const loading = ref(true) // 鍒楄〃鐨勫姞杞戒腑
+const total = ref(0) // 鍒楄〃鐨勬�婚〉鏁�
+const list = ref([]) // 鍒楄〃鐨勬暟
+const queryParams = reactive({
+ pageNo: 1,
+ pageSize: 10,
+ username: undefined,
+ mobile: undefined,
+ status: undefined,
+ deptId: undefined,
+ createTime: []
+})
+const queryFormRef = ref() // 鎼滅储鐨勮〃鍗�
+
+/** 鏌ヨ鍒楄〃 */
+const getList = async () => {
+ loading.value = true
+ try {
+ const data = await UserApi.getUserPage(queryParams)
+ list.value = data.list
+ total.value = data.total
+ } finally {
+ loading.value = false
+ }
+}
+
+/** 鎼滅储鎸夐挳鎿嶄綔 */
+const handleQuery = () => {
+ queryParams.pageNo = 1
+ getList()
+}
+
+/** 閲嶇疆鎸夐挳鎿嶄綔 */
+const resetQuery = () => {
+ queryFormRef.value?.resetFields()
+ handleQuery()
+}
+
+/** 澶勭悊閮ㄩ棬琚偣鍑� */
+const handleDeptNodeClick = async (row) => {
+ queryParams.deptId = row.id
+ await getList()
+}
+
+/** 鎵撳紑寮圭獥 */
+const open = async () => {
+ dialogVisible.value = true
+ loading.value = true
+ try {
+ await getList()
+ } finally {
+ loading.value = false
+ }
+}
+defineExpose({ open }) // 鎻愪緵 open 鏂规硶锛岀敤浜庢墦寮�寮圭獥
+
+/** 鍏ㄩ��/鍏ㄤ笉閫� */
+const handleCheckAll = (checked: boolean) => {
+ isCheckAll.value = checked
+ isIndeterminate.value = false
+
+ list.value.forEach((combinationActivity) => handleCheckOne(checked, combinationActivity, false))
+}
+
+/**
+ * 閫変腑涓�琛�
+ * @param checked 鏄惁閫変腑
+ * @param combinationActivity 娲诲姩
+ * @param isCalcCheckAll 鏄惁璁$畻鍏ㄩ��
+ */
+const handleCheckOne = (checked: boolean, combinationActivity, isCalcCheckAll: boolean) => {
+ if (checked) {
+ checkedUsers.value.push(combinationActivity as never)
+ checkedStatus.value[combinationActivity.id] = true
+ } else {
+ const index = findCheckedIndex(combinationActivity)
+ if (index > -1) {
+ checkedUsers.value.splice(index, 1)
+ checkedStatus.value[combinationActivity.id] = false
+ isCheckAll.value = false
+ }
+ }
+
+ // 璁$畻鍏ㄩ�夋鐘舵��
+ if (isCalcCheckAll) {
+ calculateIsCheckAll()
+ }
+}
+
+// 鏌ユ壘娲诲姩鍦ㄥ凡閫変腑娲诲姩鍒楄〃涓殑绱㈠紩
+const findCheckedIndex = (user) => checkedUsers.value.findIndex((item) => item.id === user.id)
+
+// 璁$畻鍏ㄩ�夋鐘舵��
+const calculateIsCheckAll = () => {
+ isCheckAll.value = list.value.every((user) => checkedStatus.value[user.id])
+ // 璁$畻涓棿鐘舵�侊細涓嶆槸鍏ㄩ儴閫変腑 && 浠绘剰涓�涓�変腑
+ isIndeterminate.value =
+ !isCheckAll.value && list.value.some((user) => checkedStatus.value[user.id])
+}
+
+/** 澶氶�夊畬鎴� */
+const handleEmitChange = () => {
+ // 鍏抽棴寮圭獥
+ dialogVisible.value = false
+ emits('change', [...checkedUsers.value])
+}
+
+/** 纭閫夋嫨鏃剁殑瑙﹀彂浜嬩欢 */
+const emits = defineEmits<{
+ change: [CombinationActivityApi: any]
+}>()
+</script>
--
Gitblit v1.8.0