feat: custom worker count (#46)

* feat: add worker max type

* feat: add default worker max

* refactor: support adjustable worker max

* refactor: bind worker max to form data
This commit is contained in:
Methapon Metanipat 2024-11-01 14:34:03 +07:00 committed by GitHub
parent 6d77c1a19d
commit 7817f8bd40
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 33 additions and 13 deletions

View file

@ -1,17 +1,17 @@
<script lang="ts" setup>
import { QTableProps } from 'quasar';
import TableComponents from 'src/components/TableComponents.vue';
import { onMounted } from 'vue';
defineEmits<{
(e: 'delete', index: number): void;
(e: 'check', index: number): void;
}>();
const employeeAmount = defineModel<number>('employeeAmount', { default: 1 });
withDefaults(
defineProps<{
readonly?: boolean;
employeeAmount?: number;
fallbackImg?: string;
hideQuantity?: boolean;
checkable?: boolean;
@ -30,7 +30,6 @@ withDefaults(
}>(),
{
rows: () => [],
employeeAmount: 0,
},
);
@ -157,15 +156,22 @@ const columns = [
</TableComponents>
<div v-if="!hideQuantity" class="row q-pt-md items-center">
<span class="q-ml-auto">
<span class="q-ml-auto q-mr-sm">
{{ $t('general.numberOf', { msg: $t('quotation.employee') }) }}
</span>
<div
class="surface-tab bordered rounded flex items-center justify-center q-mx-md"
style="width: 30px; height: 30px"
>
{{ employeeAmount || '0' }}
</div>
<q-input
for="worker-count"
dense
outlined
style="width: 67px"
:type="readonly ? 'text' : 'number'"
class="col-1"
input-class="text-center"
:readonly
hide-bottom-space
v-model="employeeAmount"
/>
</div>
</div>
</template>

View file

@ -485,6 +485,7 @@ async function convertDataToFormSubmit() {
quotationFormData.value = {
id: quotationFormData.value.id,
workerMax: quotationFormData.value.workerMax,
productServiceList: quotationFormData.value.productServiceList,
urgent: quotationFormData.value.urgent,
customerBranchId: quotationFormData.value.customerBranchId,
@ -683,6 +684,10 @@ function convertEmployeeToTable() {
preSelectedWorker.value,
);
pageState.employeeModal = false;
quotationFormData.value.workerMax = Math.max(
quotationFormData.value.workerMax || 1,
selectedWorker.value.length,
);
}
function changeMode(mode: string) {
@ -1147,7 +1152,16 @@ const view = ref<View>(View.Quotation);
<div class="surface-1 q-pa-md full-width">
<WorkerItem
:employee-amount="selectedWorker.length"
@update:employee-amount="
(v) =>
(quotationFormData.workerMax = Math.max(
v,
selectedWorker.length,
))
"
:employee-amount="
quotationFormData.workerMax || selectedWorker.length
"
:readonly="readonly"
fallback-img="/images/employee-avatar.png"
:rows="

View file

@ -23,6 +23,7 @@ const DEFAULT_DATA: QuotationPayload = {
urgent: false,
customerBranchId: '',
worker: [],
workerMax: 1,
payBillDate: new Date(),
paySplit: [],
paySplitCount: 0,
@ -158,8 +159,6 @@ export const useQuotationForm = defineStore('form-quotation', () => {
if (mode === 'assign') return;
currentFormState.value.mode = mode;
console.log(currentFormData.value);
}
async function submitQuotation() {

View file

@ -351,6 +351,7 @@ export type QuotationPayload = {
registeredBranchId: string;
urgent: boolean;
worker: EmployeeWorker[];
workerMax: number | null;
_count: { worker: number };
discount?: number;
payBillDate?: Date | null;