added table of co-worker
This commit is contained in:
@@ -179,16 +179,10 @@ export const SYSTEM_SETTING_GROUPS: SettingGroupDef[] = [
|
|||||||
title: 'دسترسی مشتری به قابلیتها',
|
title: 'دسترسی مشتری به قابلیتها',
|
||||||
icon: 'vuesax-linear:people',
|
icon: 'vuesax-linear:people',
|
||||||
match: (k) =>
|
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
|
k
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
|
||||||
id: 'limits',
|
|
||||||
title: 'محدودیتها',
|
|
||||||
icon: 'vuesax-linear:lock',
|
|
||||||
match: (k) => k === 'group_sms'
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
id: 'support_chat',
|
id: 'support_chat',
|
||||||
title: 'چت پشتیبانی',
|
title: 'چت پشتیبانی',
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<a-form :model="form" ref="formRef" autocomplete="off">
|
<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">
|
<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
|
<BasicSelect
|
||||||
v-model:value="selectedGroup"
|
v-model:value="selectedGroup"
|
||||||
:items="groupItems"
|
:items="groupItems"
|
||||||
@@ -12,23 +12,6 @@
|
|||||||
/>
|
/>
|
||||||
</a-form-item>
|
</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">
|
<a-form-item label="انتخاب کاربر" class="md:col-span-4 mb-0">
|
||||||
<BasicInput
|
<BasicInput
|
||||||
place-holder="جستجو"
|
place-holder="جستجو"
|
||||||
@@ -42,13 +25,13 @@
|
|||||||
rowKey="mobile"
|
rowKey="mobile"
|
||||||
:row-selection="{ selectedRowKeys: form.numbers, onChange: onSelectChange }"
|
:row-selection="{ selectedRowKeys: form.numbers, onChange: onSelectChange }"
|
||||||
:columns="columns"
|
:columns="columns"
|
||||||
:scroll="{ y: 280, x: 500 }"
|
:scroll="{ y: '20vh', x: 500 }"
|
||||||
:pagination="false"
|
:pagination="false"
|
||||||
:data-source="groupNumbers"
|
:data-source="groupNumbers"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div
|
<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">
|
<div v-if="customersLoading" class="flex justify-center py-6">
|
||||||
<a-spin size="small" />
|
<a-spin size="small" />
|
||||||
@@ -131,6 +114,7 @@ async function loadGroupNumbers(val: string[]) {
|
|||||||
if (!val.length) {
|
if (!val.length) {
|
||||||
groupNumbers.value = []
|
groupNumbers.value = []
|
||||||
baseGroupNumbers = []
|
baseGroupNumbers = []
|
||||||
|
props.form.numbers = []
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,6 +123,9 @@ async function loadGroupNumbers(val: string[]) {
|
|||||||
const { customers } = await getCustomerList(val)
|
const { customers } = await getCustomerList(val)
|
||||||
groupNumbers.value = customers
|
groupNumbers.value = customers
|
||||||
baseGroupNumbers = 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) {
|
} catch (e) {
|
||||||
console.error(e)
|
console.error(e)
|
||||||
} finally {
|
} finally {
|
||||||
@@ -147,7 +134,8 @@ async function loadGroupNumbers(val: string[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function onSelectChange(changableRowKeys: 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) {
|
function isSelected(mobile?: string) {
|
||||||
@@ -157,6 +145,7 @@ function isSelected(mobile?: string) {
|
|||||||
|
|
||||||
function toggleCustomer(mobile: string | undefined, checked: boolean) {
|
function toggleCustomer(mobile: string | undefined, checked: boolean) {
|
||||||
if (!mobile) return
|
if (!mobile) return
|
||||||
|
if (!baseGroupNumbers.some((c) => c.mobile === mobile)) return
|
||||||
const numbers = new Set(props.form.numbers ?? [])
|
const numbers = new Set(props.form.numbers ?? [])
|
||||||
if (checked) numbers.add(mobile)
|
if (checked) numbers.add(mobile)
|
||||||
else numbers.delete(mobile)
|
else numbers.delete(mobile)
|
||||||
@@ -172,6 +161,7 @@ function resetAll() {
|
|||||||
selectedGroup.value = []
|
selectedGroup.value = []
|
||||||
groupNumbers.value = []
|
groupNumbers.value = []
|
||||||
baseGroupNumbers = []
|
baseGroupNumbers = []
|
||||||
|
props.form.numbers = []
|
||||||
}
|
}
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
@@ -179,16 +169,3 @@ defineExpose({
|
|||||||
resetAll
|
resetAll
|
||||||
})
|
})
|
||||||
</script>
|
</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>
|
|
||||||
|
|||||||
@@ -28,9 +28,7 @@
|
|||||||
show-icon
|
show-icon
|
||||||
message="ارسال ۱۰تایی انجام میشود. تا پایان کار پنل را نبندید و صفحه را رفرش نکنید."
|
message="ارسال ۱۰تایی انجام میشود. تا پایان کار پنل را نبندید و صفحه را رفرش نکنید."
|
||||||
/>
|
/>
|
||||||
<div class="sms-editor-scroll">
|
<SmsEditorFormBody ref="smsEditorRef" :form="form" :group-items="groupItems" :loading="loading" />
|
||||||
<SmsEditorFormBody ref="smsEditorRef" :form="form" :group-items="groupItems" :loading="loading" />
|
|
||||||
</div>
|
|
||||||
</BasicActionSheet>
|
</BasicActionSheet>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -60,8 +58,7 @@ const sendStore = useGroupSmsSendStore()
|
|||||||
|
|
||||||
const form = ref<Sms>({
|
const form = ref<Sms>({
|
||||||
message: '',
|
message: '',
|
||||||
numbers: [],
|
numbers: []
|
||||||
single: []
|
|
||||||
})
|
})
|
||||||
|
|
||||||
const addSMSVisible = ref<boolean>(false)
|
const addSMSVisible = ref<boolean>(false)
|
||||||
@@ -115,8 +112,7 @@ async function add() {
|
|||||||
function resetData() {
|
function resetData() {
|
||||||
form.value = {
|
form.value = {
|
||||||
message: '',
|
message: '',
|
||||||
numbers: [],
|
numbers: []
|
||||||
single: []
|
|
||||||
}
|
}
|
||||||
smsEditorRef.value?.resetAll?.()
|
smsEditorRef.value?.resetAll?.()
|
||||||
}
|
}
|
||||||
@@ -132,9 +128,9 @@ function ok() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
smsEditorRef.value?.validateFields?.().then(async () => {
|
smsEditorRef.value?.validateFields?.().then(async () => {
|
||||||
const numbers = uniqueNumbers([...(form.value.numbers ?? []), ...(form.value.single ?? [])])
|
const numbers = uniqueNumbers([...(form.value.numbers ?? [])])
|
||||||
if (!numbers.length) {
|
if (!numbers.length) {
|
||||||
message.warning('حداقل یک شماره انتخاب کنید')
|
message.warning('حداقل یک مشتری از لیست انتخاب کنید')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (!form.value.message?.trim()) {
|
if (!form.value.message?.trim()) {
|
||||||
@@ -149,11 +145,3 @@ function ok() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.sms-editor-scroll {
|
|
||||||
max-height: min(62vh, 560px);
|
|
||||||
overflow-y: auto;
|
|
||||||
padding-inline-end: 4px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|||||||
Reference in New Issue
Block a user