added table of co-worker

This commit is contained in:
2026-08-16 20:27:13 +03:30
parent 609f6b2fa3
commit f192d3e171
3 changed files with 17 additions and 58 deletions
@@ -179,16 +179,10 @@ export const SYSTEM_SETTING_GROUPS: SettingGroupDef[] = [
title: 'دسترسی مشتری به قابلیت‌ها',
icon: 'vuesax-linear:people',
match: (k) =>
/^(enable_conditional_order|enable_product_funds|has_page_price_trigger|has_page_notification|has_page_gift_card|enable_customer_level_profit|banner_enabled|jibit_enabled|customer_direct_sms|has_page_earn_money|tracking_systems_enabled|permision__enabled|show_to_users_chat)$/.test(
/^(enable_conditional_order|enable_product_funds|has_page_price_trigger|has_page_notification|has_page_gift_card|enable_customer_level_profit|banner_enabled|jibit_enabled|customer_direct_sms|has_page_earn_money|group_sms|tracking_systems_enabled|permision__enabled|show_to_users_chat)$/.test(
k
)
},
{
id: 'limits',
title: 'محدودیت‌ها',
icon: 'vuesax-linear:lock',
match: (k) => k === 'group_sms'
},
{
id: 'support_chat',
title: 'چت پشتیبانی',
@@ -1,7 +1,7 @@
<template>
<a-form :model="form" ref="formRef" autocomplete="off">
<div class="space-y-3 md:grid md:grid-cols-4 md:gap-2 md:space-y-0">
<a-form-item label="انتخاب گروه">
<a-form-item label="انتخاب گروه" class="md:col-span-4">
<BasicSelect
v-model:value="selectedGroup"
:items="groupItems"
@@ -12,23 +12,6 @@
/>
</a-form-item>
<a-form-item label="شماره های تکی" name="numbers" class="md:col-span-3">
<BasicSelect
v-model:value="form.single"
mode="tags"
valueName="name"
keyName="mobile"
type="tel"
noData="لطفا شماره موبایل را وارد کنید و سپس روی کیبورد خود کلید تایید را بزنید"
class="w-full sms-selector"
>
<template #notFoundContent>
<a-spin v-if="loading" size="small" />
<div v-else class="w-full text-center font-bold">لطفا شماره را وارد کنید</div>
</template>
</BasicSelect>
</a-form-item>
<a-form-item label="انتخاب کاربر" class="md:col-span-4 mb-0">
<BasicInput
place-holder="جستجو"
@@ -42,13 +25,13 @@
rowKey="mobile"
:row-selection="{ selectedRowKeys: form.numbers, onChange: onSelectChange }"
:columns="columns"
:scroll="{ y: 280, x: 500 }"
:scroll="{ y: '20vh', x: 500 }"
:pagination="false"
:data-source="groupNumbers"
/>
<div
class="md:hidden max-h-64 overflow-y-auto rounded-xl border border-gray-200 bg-gray-50 p-2 space-y-1"
class="md:hidden max-h-48 overflow-y-auto rounded-xl border border-gray-200 bg-gray-50 p-2 space-y-1"
>
<div v-if="customersLoading" class="flex justify-center py-6">
<a-spin size="small" />
@@ -131,6 +114,7 @@ async function loadGroupNumbers(val: string[]) {
if (!val.length) {
groupNumbers.value = []
baseGroupNumbers = []
props.form.numbers = []
return
}
@@ -139,6 +123,9 @@ async function loadGroupNumbers(val: string[]) {
const { customers } = await getCustomerList(val)
groupNumbers.value = customers
baseGroupNumbers = customers
// فقط شماره‌های همین لیست مشتری بمانند
const allowed = new Set(customers.map((c) => c.mobile).filter(Boolean) as string[])
props.form.numbers = (props.form.numbers ?? []).filter((n) => allowed.has(n))
} catch (e) {
console.error(e)
} finally {
@@ -147,7 +134,8 @@ async function loadGroupNumbers(val: string[]) {
}
function onSelectChange(changableRowKeys: string[]) {
props.form.numbers = changableRowKeys
const allowed = new Set(baseGroupNumbers.map((c) => c.mobile).filter(Boolean) as string[])
props.form.numbers = changableRowKeys.filter((n) => allowed.has(n))
}
function isSelected(mobile?: string) {
@@ -157,6 +145,7 @@ function isSelected(mobile?: string) {
function toggleCustomer(mobile: string | undefined, checked: boolean) {
if (!mobile) return
if (!baseGroupNumbers.some((c) => c.mobile === mobile)) return
const numbers = new Set(props.form.numbers ?? [])
if (checked) numbers.add(mobile)
else numbers.delete(mobile)
@@ -172,6 +161,7 @@ function resetAll() {
selectedGroup.value = []
groupNumbers.value = []
baseGroupNumbers = []
props.form.numbers = []
}
defineExpose({
@@ -179,16 +169,3 @@ defineExpose({
resetAll
})
</script>
<style scoped>
.sms-selector :deep(.ant-select-selector) {
max-height: 5vh;
overflow-y: auto;
}
@media (max-width: 767px) {
.sms-selector :deep(.ant-select-selector) {
max-height: 12vh;
}
}
</style>
+5 -17
View File
@@ -28,9 +28,7 @@
show-icon
message="ارسال ۱۰تایی انجام می‌شود. تا پایان کار پنل را نبندید و صفحه را رفرش نکنید."
/>
<div class="sms-editor-scroll">
<SmsEditorFormBody ref="smsEditorRef" :form="form" :group-items="groupItems" :loading="loading" />
</div>
<SmsEditorFormBody ref="smsEditorRef" :form="form" :group-items="groupItems" :loading="loading" />
</BasicActionSheet>
</div>
</template>
@@ -60,8 +58,7 @@ const sendStore = useGroupSmsSendStore()
const form = ref<Sms>({
message: '',
numbers: [],
single: []
numbers: []
})
const addSMSVisible = ref<boolean>(false)
@@ -115,8 +112,7 @@ async function add() {
function resetData() {
form.value = {
message: '',
numbers: [],
single: []
numbers: []
}
smsEditorRef.value?.resetAll?.()
}
@@ -132,9 +128,9 @@ function ok() {
}
smsEditorRef.value?.validateFields?.().then(async () => {
const numbers = uniqueNumbers([...(form.value.numbers ?? []), ...(form.value.single ?? [])])
const numbers = uniqueNumbers([...(form.value.numbers ?? [])])
if (!numbers.length) {
message.warning('حداقل یک شماره انتخاب کنید')
message.warning('حداقل یک مشتری از لیست انتخاب کنید')
return
}
if (!form.value.message?.trim()) {
@@ -149,11 +145,3 @@ function ok() {
})
}
</script>
<style scoped>
.sms-editor-scroll {
max-height: min(62vh, 560px);
overflow-y: auto;
padding-inline-end: 4px;
}
</style>