提交 d43b68e0 authored 作者: 袁伟伟's avatar 袁伟伟
...@@ -63,10 +63,26 @@ export interface BatchOrderParams extends BasePageParams { ...@@ -63,10 +63,26 @@ export interface BatchOrderParams extends BasePageParams {
* 收货地址 * 收货地址
*/ */
address?: string; address?: string;
/**
* 工单状态
*/
status?: String;
/**
* 工单状态 IN值List
*/
statusList?: Array<string>;
/** /**
* 备注 * 备注
*/ */
remark?: string; remark?: string;
/**
* 是否是主订单
*/
type?: String;
/**
* 是否是主订单 IN值List
*/
typeList?: Array<string>;
/** /**
* 是否删除 * 是否删除
*/ */
...@@ -170,10 +186,18 @@ export interface BatchOrder { ...@@ -170,10 +186,18 @@ export interface BatchOrder {
* 收货地址 * 收货地址
*/ */
address?: string; address?: string;
/**
* 工单状态
*/
status?: String;
/** /**
* 备注 * 备注
*/ */
remark?: string; remark?: string;
/**
* 是否是主订单
*/
type?: String;
/** /**
* 是否删除 * 是否删除
*/ */
......
...@@ -5,81 +5,66 @@ ...@@ -5,81 +5,66 @@
*/ */
import { defHttp } from '/@/utils/http/axios'; import { defHttp } from '/@/utils/http/axios';
import { ApiResponse } from '../model/baseModel';
import { import {
BatchOrder, BatchOrder,
BatchOrderParams, BatchOrderParams,
BatchOrderPageResult, BatchOrderPageResult,
BatchOrderPageResponse,
BatchOrderResponse,
} from '../model/batchOrder'; } from '../model/batchOrder';
const baseApi = '/v1/order/batch-order'; const baseApi = '/v1/order/batch-order';
/** /**
* 新增 * 新增
*/ */
export const add = (entity: BatchOrder) => export const add = (entity: BatchOrder) => defHttp.post<BatchOrder>({ url: `${baseApi}/`, data: entity });
defHttp.post<BatchOrder>({ url: `${baseApi}/`, data: entity });
/** /**
* 更新 * 更新
*/ */
export const update = (entity: BatchOrder) => export const update = (entity: BatchOrder) => defHttp.put<BatchOrder>({ url: `${baseApi}/`, data: entity });
defHttp.put<BatchOrder>({ url: `${baseApi}/`, data: entity });
/** /**
* 删除 * 删除
*/ */
export const remove = (id: any) => export const remove = (id: any) => defHttp.delete<Number>({ url: `${baseApi}/${id}` });
defHttp.delete<Number>({ url: `${baseApi}/${id}` });
/** /**
* 分页查询 * 分页查询
*/ */
export const search = (params?: BatchOrderParams) => export const search = (params?: BatchOrderParams) => defHttp.get<BatchOrderPageResult>({ url: `${baseApi}/search`, params });
defHttp.get<BatchOrderPageResult>({ url: `${baseApi}/search`, params });
/** /**
* 列表查询 * 列表查询
*/ */
export const all = (params?: BatchOrderParams) => export const all = (params?: BatchOrderParams) => defHttp.get<BatchOrderPageResult>({ url: `${baseApi}/all`, params });
defHttp.get<BatchOrderPageResult>({ url: `${baseApi}/all`, params });
/** /**
* 通过主键查询 * 通过主键查询
*/ */
export const getById = (id: any) => export const getById = (id: any) => defHttp.get<BatchOrder>({ url: `${baseApi}/${id}` });
defHttp.get<BatchOrder>({ url: `${baseApi}/${id}` });
/** /**
* 单个查询 * 单个查询
*/ */
export const getOne = (params?: BatchOrderParams) => export const getOne = (params?: BatchOrderParams) => defHttp.get<BatchOrder>({ url: `${baseApi}/one`, params });
defHttp.get<BatchOrder>({ url: `${baseApi}/one`, params });
/** /**
* 批量删除 * 批量删除
*/ */
export const batchRemove = (idList: Array<any>) => export const batchRemove = (idList: Array<any>) => defHttp.post<boolean>({ url: `${baseApi}/batch-delete`, data: idList });
defHttp.post<boolean>({ url: `${baseApi}/batch-delete`, data: idList });
/** /**
* 批量新增 * 批量新增
*/ */
export const batchAdd = (entityList: Array<BatchOrder>) => export const batchAdd = (entityList: Array<BatchOrder>) => defHttp.post<boolean>({ url: `${baseApi}/batch-save`, data: entityList });
defHttp.post<boolean>({ url: `${baseApi}/batch-save`, data: entityList });
/** /**
* 批量更新 * 批量更新
*/ */
export const batchUpdate = (entityList: Array<BatchOrder>) => export const batchUpdate = (entityList: Array<BatchOrder>) => defHttp.post<boolean>({ url: `${baseApi}/batch-update`, data: entityList });
defHttp.post<boolean>({ url: `${baseApi}/batch-update`, data: entityList });
/** /**
* 查询数量 * 查询数量
*/ */
export const count = (params?: BatchOrderParams) => export const count = (params?: BatchOrderParams) => defHttp.get<Number>({ url: `${baseApi}/count`, params });
defHttp.get<Number>({ url: `${baseApi}/count`, params });
...@@ -5,11 +5,7 @@ ...@@ -5,11 +5,7 @@
*/ */
import { defHttp } from '/@/utils/http/axios'; import { defHttp } from '/@/utils/http/axios';
import { import { Distributor, DistributorParams, DistributorPageResult } from '../model/distributor';
Distributor,
DistributorParams,
DistributorPageResult,
} from '../model/distributor';
const baseApi = '/v1/system/distributor'; const baseApi = '/v1/system/distributor';
/** /**
...@@ -30,12 +26,13 @@ export const remove = (id: any) => defHttp.delete<Number>({ url: `${baseApi}/${i ...@@ -30,12 +26,13 @@ export const remove = (id: any) => defHttp.delete<Number>({ url: `${baseApi}/${i
/** /**
* 分页查询 * 分页查询
*/ */
export const search = (params?: DistributorParams) => defHttp.get<DistributorPageResult>({ url: `${baseApi}/search`, params }); export const search = (params?: DistributorParams) =>
defHttp.get<DistributorPageResult>({ url: `${baseApi}/search`, params });
/** /**
* 列表查询 * 列表查询
*/ */
export const all = (params?: DistributorParams) => defHttp.get<DistributorPageResult>({ url: `${baseApi}/all`, params }); export const all = (params?: DistributorParams) => defHttp.get<Distributor[]>({ url: `${baseApi}/all`, params });
/** /**
* 通过主键查询 * 通过主键查询
...@@ -50,21 +47,28 @@ export const getOne = (params?: DistributorParams) => defHttp.get<Distributor>({ ...@@ -50,21 +47,28 @@ export const getOne = (params?: DistributorParams) => defHttp.get<Distributor>({
/** /**
* 批量删除 * 批量删除
*/ */
export const batchRemove = (idList: Array<any>) => defHttp.post<boolean>({ url: `${baseApi}/batch-delete`, data: idList }); export const batchRemove = (idList: Array<any>) =>
defHttp.post<boolean>({ url: `${baseApi}/batch-delete`, data: idList });
/** /**
* 批量新增 * 批量新增
*/ */
export const batchAdd = (entityList: Array<Distributor>) => defHttp.post<boolean>({ url: `${baseApi}/batch-save`, data: entityList }); export const batchAdd = (entityList: Array<Distributor>) =>
defHttp.post<boolean>({ url: `${baseApi}/batch-save`, data: entityList });
/** /**
* 批量更新 * 批量更新
*/ */
export const batchUpdate = (entityList: Array<Distributor>) => defHttp.post<boolean>({ url: `${baseApi}/batch-update`, data: entityList }); export const batchUpdate = (entityList: Array<Distributor>) =>
defHttp.post<boolean>({ url: `${baseApi}/batch-update`, data: entityList });
/** /**
* 查询数量 * 查询数量
*/ */
export const count = (params?: DistributorParams) => defHttp.get<Number>({ url: `${baseApi}/count`, params }); export const count = (params?: DistributorParams) => defHttp.get<Number>({ url: `${baseApi}/count`, params });
/**
* 列表查询
*/
export const allWithoutAuth = (params?: DistributorParams) =>
defHttp.get<Distributor[]>({ url: `${baseApi}/all/without/auth`, params });
...@@ -84,8 +84,7 @@ export const logout = () => defHttp.post<any>({ url: `${baseApi}/logout` }, { er ...@@ -84,8 +84,7 @@ export const logout = () => defHttp.post<any>({ url: `${baseApi}/logout` }, { er
/** /**
* 用户注册 * 用户注册
*/ */
export const register = (user: User) => export const register = (user: User) => defHttp.post<User>({ url: `${baseApi}/register`, data: user });
defHttp.post<User>({ url: `${baseApi}/login`, data: user }, { errorMessageMode: 'none' });
/** /**
* 当前用户信息 * 当前用户信息
......
interface ruleParams { export const phoneRule = (ruleParam?: any) => {
message?: string;
trigger?: string;
}
export const phoneRule = (ruleParam?: ruleParams) => {
const { message = '请输入正确的手机号码!', trigger = 'blur' } = ruleParam || {};
return { return {
pattern: /^1[3456789]\d{9}$/, pattern: /^1[3456789]\d{9}$/,
message: message, message: '请输入正确的手机号码!',
trigger: trigger, trigger: 'blur',
...ruleParam,
}; };
}; };
...@@ -8,6 +8,7 @@ import * as DoctorApi from '/@/api/system/doctorApi'; ...@@ -8,6 +8,7 @@ import * as DoctorApi from '/@/api/system/doctorApi';
import * as UserApi from '/@/api/system/userApi'; import * as UserApi from '/@/api/system/userApi';
import { StatusValEnum as DoctorStatusValEnum } from '/@/views/system/doctor/enum'; import { StatusValEnum as DoctorStatusValEnum } from '/@/views/system/doctor/enum';
import { StatusValEnum as UserStatusValEnum } from '/@/views/system/user/enum'; import { StatusValEnum as UserStatusValEnum } from '/@/views/system/user/enum';
import { StatusValEnum as DistributorValEnum } from '/@/views/system/distributor/enum';
import { StatusValEnum as ReceiverStatusValEnum } from '/@/views/system/receiver/enum'; import { StatusValEnum as ReceiverStatusValEnum } from '/@/views/system/receiver/enum';
import { RoleEnum } from '/@/views/system/role/enum'; import { RoleEnum } from '/@/views/system/role/enum';
import * as ThirdApi from '/@/api/system/thirdApi'; import * as ThirdApi from '/@/api/system/thirdApi';
...@@ -38,7 +39,7 @@ const getDistributorId = ({ colProps }) => { ...@@ -38,7 +39,7 @@ const getDistributorId = ({ colProps }) => {
labelInValue: true, labelInValue: true,
api: DistributorApi.all, api: DistributorApi.all,
params: { params: {
status: UserStatusValEnum.PASSED, status: DistributorValEnum.PASSED,
}, },
resultField: 'records', resultField: 'records',
labelField: 'name', labelField: 'name',
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
:value="innerValueRef" :value="innerValueRef"
@change="handleChange" @change="handleChange"
:disabled="disabled" :disabled="disabled"
autocomplete="new-password"
> >
<template #[item]="data" v-for="item in Object.keys($slots)"> <template #[item]="data" v-for="item in Object.keys($slots)">
<slot :name="item" v-bind="data || {}"></slot> <slot :name="item" v-bind="data || {}"></slot>
......
...@@ -38,9 +38,9 @@ ...@@ -38,9 +38,9 @@
<ACol :span="12"> <ACol :span="12">
<FormItem :style="{ 'text-align': 'right' }"> <FormItem :style="{ 'text-align': 'right' }">
<!-- No logic, you need to deal with it yourself --> <!-- No logic, you need to deal with it yourself -->
<Button type="link" size="small" @click="setLoginState(LoginStateEnum.RESET_PASSWORD)"> <!-- <Button type="link" size="small" @click="setLoginState(LoginStateEnum.RESET_PASSWORD)">-->
{{ t('sys.login.forgetPassword') }} <!-- {{ t('sys.login.forgetPassword') }}-->
</Button> <!-- </Button>-->
</FormItem> </FormItem>
</ACol> </ACol>
</ARow> </ARow>
...@@ -49,9 +49,9 @@ ...@@ -49,9 +49,9 @@
<Button type="primary" size="large" block @click="handleLogin" :loading="loading"> <Button type="primary" size="large" block @click="handleLogin" :loading="loading">
{{ t('sys.login.loginButton') }} {{ t('sys.login.loginButton') }}
</Button> </Button>
<!-- <Button size="large" class="mt-4 enter-x" block @click="handleRegister"> <Button size="large" class="mt-4 enter-x" block @click="setLoginState(LoginStateEnum.REGISTER)">
{{ t('sys.login.registerButton') }} {{ t('sys.login.registerButton') }}
</Button> --> </Button>
</FormItem> </FormItem>
<!-- <!--
<ARow class="enter-x"> <ARow class="enter-x">
......
...@@ -2,36 +2,37 @@ ...@@ -2,36 +2,37 @@
<template v-if="getShow"> <template v-if="getShow">
<LoginFormTitle class="enter-x" /> <LoginFormTitle class="enter-x" />
<Form class="p-4 enter-x" :model="formData" :rules="getFormRules" ref="formRef"> <Form class="p-4 enter-x" :model="formData" :rules="getFormRules" ref="formRef">
<FormItem name="account" class="enter-x"> <FormItem name="username" class="enter-x">
<Input <Input class="fix-auto-fill" size="large" v-model:value="formData.username" placeholder="用户名" />
class="fix-auto-fill"
size="large"
v-model:value="formData.account"
:placeholder="t('sys.login.userName')"
/>
</FormItem> </FormItem>
<FormItem name="mobile" class="enter-x"> <a-spin :spinning="isDistributorOptionsLoading">
<Input <FormItem name="distributorId" class="enter-x" :rules="[{ required: true, message: '请选择经销商!' }]">
<a-select
v-model:value="formData.distributorId"
size="large" size="large"
v-model:value="formData.mobile" style="width: 100%"
:placeholder="t('sys.login.mobile')" :options="distributorOptions"
class="fix-auto-fill" placeholder="请选择经销商"
:show-search="true"
:fieldNames="{ label: 'name', value: 'id' }"
:allowClear="false"
optionFilterProp="name"
/> />
</FormItem> </FormItem>
<FormItem name="sms" class="enter-x"> </a-spin>
<CountdownInput <FormItem name="mobile" class="enter-x" :rules="[phoneRule({ required: true })]">
size="large" <Input size="large" v-model:value="formData.mobile" placeholder="手机号" class="fix-auto-fill" />
class="fix-auto-fill"
v-model:value="formData.sms"
:placeholder="t('sys.login.smsCode')"
/>
</FormItem> </FormItem>
<!-- <FormItem name="sms" class="enter-x">-->
<!-- <CountdownInput-->
<!-- size="large"-->
<!-- class="fix-auto-fill"-->
<!-- v-model:value="formData.sms"-->
<!-- :placeholder="t('sys.login.smsCode')"-->
<!-- />-->
<!-- </FormItem>-->
<FormItem name="password" class="enter-x"> <FormItem name="password" class="enter-x">
<StrengthMeter <StrengthMeter size="large" v-model:value="formData.password" :placeholder="t('sys.login.password')" />
size="large"
v-model:value="formData.password"
:placeholder="t('sys.login.password')"
/>
</FormItem> </FormItem>
<FormItem name="confirmPassword" class="enter-x"> <FormItem name="confirmPassword" class="enter-x">
<InputPassword <InputPassword
...@@ -42,21 +43,14 @@ ...@@ -42,21 +43,14 @@
/> />
</FormItem> </FormItem>
<FormItem class="enter-x" name="policy"> <!-- <FormItem class="enter-x" name="policy">-->
<!-- No logic, you need to deal with it yourself --> <!-- &lt;!&ndash; No logic, you need to deal with it yourself &ndash;&gt;-->
<Checkbox v-model:checked="formData.policy" size="small"> <!-- <Checkbox v-model:checked="formData.policy" size="small">-->
{{ t('sys.login.policy') }} <!-- {{ t('sys.login.policy') }}-->
</Checkbox> <!-- </Checkbox>-->
</FormItem> <!-- </FormItem>-->
<Button <Button type="primary" class="enter-x" size="large" block @click="handleRegister" :loading="isRegisterLoading">
type="primary"
class="enter-x"
size="large"
block
@click="handleRegister"
:loading="loading"
>
{{ t('sys.login.registerButton') }} {{ t('sys.login.registerButton') }}
</Button> </Button>
<Button size="large" block class="mt-4 enter-x" @click="handleBackLogin"> <Button size="large" block class="mt-4 enter-x" @click="handleBackLogin">
...@@ -66,13 +60,19 @@ ...@@ -66,13 +60,19 @@
</template> </template>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { reactive, ref, unref, computed } from 'vue'; import { notification } from 'ant-design-vue';
import { reactive, ref, unref, computed, watch } from 'vue';
import LoginFormTitle from './LoginFormTitle.vue'; import LoginFormTitle from './LoginFormTitle.vue';
import { Form, Input, Button, Checkbox } from 'ant-design-vue'; import { Form, Input, Button } from 'ant-design-vue';
import { StrengthMeter } from '/@/components/StrengthMeter'; import { StrengthMeter } from '/@/components/StrengthMeter';
import { CountdownInput } from '/@/components/CountDown';
import { useI18n } from '/@/hooks/web/useI18n'; import { useI18n } from '/@/hooks/web/useI18n';
import { useLoginState, useFormRules, useFormValid, LoginStateEnum } from './useLogin'; import { useLoginState, useFormRules, useFormValid, LoginStateEnum } from './useLogin';
import { phoneRule } from '/@/commonSchemaProperty/formRules';
import { useAsyncState } from '@vueuse/core';
import * as DistributorApi from '/@/api/system/distributorApi';
import * as UserApi from '/@/api/system/userApi';
import { StatusValEnum as DistributorValEnum } from '/@/views/system/distributor/enum';
import { Distributor } from '/@/api/model/distributor';
const FormItem = Form.Item; const FormItem = Form.Item;
const InputPassword = Input.Password; const InputPassword = Input.Password;
...@@ -80,10 +80,10 @@ ...@@ -80,10 +80,10 @@
const { handleBackLogin, getLoginState } = useLoginState(); const { handleBackLogin, getLoginState } = useLoginState();
const formRef = ref(); const formRef = ref();
const loading = ref(false);
const formData = reactive({ const formData = reactive({
account: '', distributorId: null,
username: '',
password: '', password: '',
confirmPassword: '', confirmPassword: '',
mobile: '', mobile: '',
...@@ -96,9 +96,62 @@ ...@@ -96,9 +96,62 @@
const getShow = computed(() => unref(getLoginState) === LoginStateEnum.REGISTER); const getShow = computed(() => unref(getLoginState) === LoginStateEnum.REGISTER);
// 查询所有经销商
const {
state: distributorOptions,
isLoading: isDistributorOptionsLoading,
execute: getDistributorOptions,
} = useAsyncState(
() => {
const params = {
status: DistributorValEnum.PASSED,
};
return DistributorApi.allWithoutAuth(params).then((res: Distributor[]) => res);
},
[],
{
immediate: false,
},
);
// 注册页面展示时,查询经销商
watch(getShow, (val) => {
if (val) {
getDistributorOptions();
}
});
// 注册
const {
isLoading: isRegisterLoading,
isReady: isRegisterReady,
execute: registerExecute,
} = useAsyncState(
(data) => {
return UserApi.register(data).then((res: any) => res);
},
[],
{
immediate: false,
},
);
// 注册成功之后
watch(isRegisterReady, (val) => {
if (val) {
notification.success({
message: '注册成功!',
description: '请等待管理员审核',
duration: 0,
});
formRef.value.resetFields();
handleBackLogin();
}
});
// 表单提交
async function handleRegister() { async function handleRegister() {
const data = await validForm(); const data = await validForm();
if (!data) return; if (!data) return;
console.log(data); await registerExecute(0, data);
} }
</script> </script>
<template> <template>
<Card :bordered="false"> <Card :bordered="false" :loading="isLoading">
<Descriptions bordered :column="3"> <Descriptions bordered :column="3">
<Descriptions.Item <Descriptions.Item
v-for="p in displayProps" v-for="p in displayProps"
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
:span="['avatar'].includes(p.name) ? 3 : 1" :span="['avatar'].includes(p.name) ? 3 : 1"
> >
<span v-if="p.key === 'avatar'"> <span v-if="p.key === 'avatar'">
<img :src="p.value" style="width: 120px; height: 120px" /> <ImagePreview :imageList="[p.value]" style="width: 120px" />
</span> </span>
<template v-else> <template v-else>
{{ p.value }} {{ p.value }}
...@@ -18,39 +18,45 @@ ...@@ -18,39 +18,45 @@
</Card> </Card>
</template> </template>
<script lang="ts" setup name="DeviceDetail"> <script lang="ts" setup name="DeviceDetail">
import { onMounted, computed, ref, reactive } from 'vue'; import { onMounted, computed, ref } from 'vue';
import { useRoute } from 'vue-router'; import { useRoute } from 'vue-router';
import { useAsyncState } from '@vueuse/core';
import { ImagePreview } from '/@/components/Preview/index';
import { ComputedRef } from '@vue/reactivity'; import { ComputedRef } from '@vue/reactivity';
import { Descriptions, Card } from 'ant-design-vue'; import { Descriptions, Card } from 'ant-design-vue';
import { descriptionColumns } from './schema'; import { descriptionColumns } from './schema';
import * as BatchOrderApi from '/@/api/order/batchOrderApi'; import * as BatchOrderApi from '/@/api/order/batchOrderApi';
import { Device } from '/@/api/model/device'; import { BatchOrder } from '/@/api/model/batchOrder';
const route = useRoute(); const route = useRoute();
const id = ref(route.params?.id); const id = ref(route.params?.id);
let data = reactive({
detail: {}, // id 查询
isOver: false, const {
}); state: detail,
const getDetail = () => { isReady: isDetailReady,
BatchOrderApi.getById(id.value).then((res: Device) => { isLoading,
data.isOver = true; execute,
data.detail = res; } = useAsyncState(
}); () => {
}; return BatchOrderApi.getById(id.value).then((res: BatchOrder) => res);
},
null,
{
immediate: false,
},
);
onMounted(() => { onMounted(() => {
getDetail(); execute();
}); });
const displayProps: ComputedRef<Array<any>> = computed(() => { const displayProps: ComputedRef<Array<any>> = computed(() => {
if (!data.isOver) return {}; if (!isDetailReady.value) return {};
const display: any = descriptionColumns.map(({ title, dataIndex = '', customRender }) => ({ const display: any = descriptionColumns.map(({ title, dataIndex = '', customRender }) => ({
key: dataIndex, key: dataIndex,
title, title,
value: customRender value: customRender ? customRender({ text: detail.value[dataIndex], record: detail.value }) : detail.value[dataIndex],
? customRender({ text: data.detail[dataIndex], record: data.detail })
: data.detail[dataIndex],
})); }));
return display; return display;
}); });
......
<template> <template>
<BasicDrawer v-bind="$attrs" @register="registerDrawer" showFooter :title="getTitle" width="600px" @ok="handleSubmit"> <BasicDrawer v-bind="$attrs" @register="registerDrawer" showFooter :confirmDisabled="getConfirmDisabled" :title="getTitle" width="600px" @ok="handleSubmit">
<a-spin :spinning="isLoading">
<BasicForm @register="registerForm" /> <BasicForm @register="registerForm" />
</a-spin>
</BasicDrawer> </BasicDrawer>
</template> </template>
<script lang="ts" setup name="BatchOrderDrawer"> <script lang="ts" setup name="BatchOrderDrawer">
...@@ -8,7 +10,9 @@ ...@@ -8,7 +10,9 @@
import { BasicForm, useForm } from '/@/components/Form/index'; import { BasicForm, useForm } from '/@/components/Form/index';
import { formSchema } from './schema'; import { formSchema } from './schema';
import { BasicDrawer, useDrawerInner } from '/@/components/Drawer'; import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
import { useAsyncState } from '@vueuse/core';
import * as BatchOrderApi from '/@/api/order/batchOrderApi'; import * as BatchOrderApi from '/@/api/order/batchOrderApi';
import { BatchOrder } from '/@/api/model/batchOrder';
const emit = defineEmits(['success', 'register']); const emit = defineEmits(['success', 'register']);
const isUpdate = ref(true); const isUpdate = ref(true);
...@@ -20,6 +24,22 @@ ...@@ -20,6 +24,22 @@
showActionButtonGroup: false, showActionButtonGroup: false,
}); });
// id 查询
const {
state: detail,
isReady: isDetailReady,
isLoading,
execute,
} = useAsyncState(
() => {
return BatchOrderApi.getById(entityId.value).then((res: BatchOrder) => res);
},
null,
{
immediate: false,
},
);
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => { const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
await resetFields(); await resetFields();
setDrawerProps({ confirmLoading: false }); setDrawerProps({ confirmLoading: false });
...@@ -27,9 +47,21 @@ ...@@ -27,9 +47,21 @@
entityId.value = data?.record?.id; entityId.value = data?.record?.id;
if (unref(isUpdate)) { if (unref(isUpdate)) {
await setFieldsValue({ await execute();
...data.record, if (detail.value) {
const formData: any = {
...detail.value,
};
await setFieldsValue(formData);
}
}
}); });
const getConfirmDisabled = computed(() => {
if (unref(isUpdate)) {
return !unref(isDetailReady);
} else {
return false;
} }
}); });
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
<span>已选中{{ checkedKeys.length }}条记录</span> <span>已选中{{ checkedKeys.length }}条记录</span>
<a-button type="link" @click="checkedKeys = []" size="small">清空</a-button> <a-button type="link" @click="checkedKeys = []" size="small">清空</a-button>
<a-popconfirm <a-popconfirm
v-auth="'AUTH_ORDER_BATCH_ORDER'"
class="ml-4" class="ml-4"
title="确定要全部删除吗?" title="确定要全部删除吗?"
ok-text="是" ok-text="是"
...@@ -27,9 +28,6 @@ ...@@ -27,9 +28,6 @@
<a-button v-auth="'AUTH_ORDER_BATCH_ORDER:ADD'" type="primary" @click="handleCreate"> 新增</a-button> <a-button v-auth="'AUTH_ORDER_BATCH_ORDER:ADD'" type="primary" @click="handleCreate"> 新增</a-button>
</template> </template>
<template #bodyCell="{ column, record, text }"> <template #bodyCell="{ column, record, text }">
<template v-if="column.dataIndex === 'id'">
<a @click="handleView(record)"> {{ record.id }} </a>
</template>
<template v-if="[].includes(column.dataIndex)"> <template v-if="[].includes(column.dataIndex)">
<img :src="text" class="photo" alt="图片" v-if="!!text" /> <img :src="text" class="photo" alt="图片" v-if="!!text" />
</template> </template>
...@@ -42,6 +40,12 @@ ...@@ -42,6 +40,12 @@
onClick: handleEdit.bind(null, record), onClick: handleEdit.bind(null, record),
ifShow: hasPermission('AUTH_ORDER_BATCH_ORDER:EDIT'), ifShow: hasPermission('AUTH_ORDER_BATCH_ORDER:EDIT'),
}, },
{
tooltip: '详情',
icon: 'ant-design:eye-outlined',
onClick: handleView.bind(null, record),
ifShow: hasPermission('AUTH_ORDER_BATCH_ORDER:QUERY'),
},
{ {
tooltip: '删除', tooltip: '删除',
icon: 'ant-design:delete-outlined', icon: 'ant-design:delete-outlined',
...@@ -60,7 +64,7 @@ ...@@ -60,7 +64,7 @@
<BatchOrderDrawer @register="registerDrawer" @success="handleSuccess" /> <BatchOrderDrawer @register="registerDrawer" @success="handleSuccess" />
</div> </div>
</template> </template>
<script lang="ts" setup name="DeviceIndex"> <script lang="ts" setup name="AUTH_ORDER_BATCH_ORDER">
import { ref } from 'vue'; import { ref } from 'vue';
import { useGo } from '/@/hooks/web/usePage'; import { useGo } from '/@/hooks/web/usePage';
import { usePermission } from '/@/hooks/web/usePermission'; import { usePermission } from '/@/hooks/web/usePermission';
...@@ -75,15 +79,20 @@ ...@@ -75,15 +79,20 @@
const { hasPermission } = usePermission(); const { hasPermission } = usePermission();
const go = useGo(); const go = useGo();
const { formConfig, showTableSetting, bordered, showIndexColumn } = componentSetting.table; const {
formConfig,
showTableSetting,
bordered,
showIndexColumn,
} = componentSetting.table;
const checkedKeys = ref<Array<string | number>>([]); const checkedKeys = ref<Array<string | number>>([]);
const onSelectChange = (selectedRowKeys: (string | number)[]) => { const onSelectChange = (selectedRowKeys: (string | number)[]) => {
checkedKeys.value = selectedRowKeys; checkedKeys.value = selectedRowKeys;
}; }
const [registerDrawer, { openDrawer }] = useDrawer(); const [registerDrawer, { openDrawer }] = useDrawer();
const [registerTable, { reload }] = useTable({ const [registerTable, { reload ,setLoading}] = useTable({
title: '批量订单管理', title: '批量订单管理',
api: (params) => BatchOrderApi.search(handleParams(params)), api: (params) => BatchOrderApi.search(handleParams(params)),
columns, columns,
...@@ -94,6 +103,7 @@ ...@@ -94,6 +103,7 @@
}, },
rowSelection: { rowSelection: {
type: 'checkbox', type: 'checkbox',
// @ts-ignore
selectedRowKeys: checkedKeys, selectedRowKeys: checkedKeys,
onChange: onSelectChange, onChange: onSelectChange,
}, },
...@@ -104,10 +114,9 @@ ...@@ -104,10 +114,9 @@
canResize: false, canResize: false,
rowKey: (record: any) => record.id, rowKey: (record: any) => record.id,
actionColumn: { actionColumn: {
width: 80, width: 120,
title: '操作', title: '操作',
dataIndex: 'action', dataIndex: 'action',
fixed: 'right', fixed: 'right',
}, },
}); });
...@@ -150,14 +159,20 @@ ...@@ -150,14 +159,20 @@
}; };
const handleDelete = (record: Recordable) => { const handleDelete = (record: Recordable) => {
setLoading(true);
BatchOrderApi.remove(record.id).then((_) => { BatchOrderApi.remove(record.id).then((_) => {
reload(); reload();
}).catch(() => {
setLoading(false);
}); });
}; };
const handleBatchDelete = () => { const handleBatchDelete = () => {
setLoading(true);
BatchOrderApi.batchRemove(checkedKeys.value).then((_) => { BatchOrderApi.batchRemove(checkedKeys.value).then((_) => {
reload(); reload();
}).catch(() => {
setLoading(false);
}); });
}; };
...@@ -166,6 +181,6 @@ ...@@ -166,6 +181,6 @@
}; };
const handleView = (record) => { const handleView = (record) => {
go('/order/batch-order/' + record.id); go('/main/order/batch-order/' + record.id);
}; };
</script> </script>
export enum StatusValEnum {
PENDING_REVIEW = 'PENDING_REVIEW',
PASSED = 'PASSED',
REJECT = 'REJECT',
FORBIDDEN = 'FORBIDDEN',
}
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
import { BasicColumn } from '/@/components/Table'; import { BasicColumn } from '/@/components/Table';
import { FormSchema } from '/@/components/Table'; import { FormSchema } from '/@/components/Table';
import { StatusValEnum } from './enum';
export enum StatusEnum { export enum StatusEnum {
PENDING_REVIEW = '待审核', PENDING_REVIEW = '待审核',
PASSED = '已通过', PASSED = '已通过',
...@@ -18,7 +18,7 @@ export enum StatusEnum { ...@@ -18,7 +18,7 @@ export enum StatusEnum {
export const StatusEnumOptions: any[] = []; export const StatusEnumOptions: any[] = [];
for (const key in StatusEnum) { for (const key in StatusEnum) {
StatusEnumOptions.push({ StatusEnumOptions.push({
value: key, value: StatusValEnum[key],
label: StatusEnum[key], label: StatusEnum[key],
}); });
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论