提交 494b8bf1 authored 作者: leon's avatar leon

手术工单模板

上级 1045aa75
......@@ -20,14 +20,14 @@ export interface OperationWorkOrderParams extends BasePageParams {
* 经销商id
*/
distributorId?: number;
/**
* 手术订单id
*/
operationOrderId?: number;
/**
* 订单编号
*/
orderSn?: string;
/**
* 手术订单id
*/
operationOrderId?: number;
/**
* 执行人ID
*/
......@@ -76,6 +76,14 @@ export interface OperationWorkOrderParams extends BasePageParams {
* 工单类型 IN值List
*/
orderModeList?: Array<string>;
/**
* 操作人ID
*/
editorId?: number;
/**
* 操作人
*/
editorName?: string;
/**
* 创建时间
*/
......@@ -119,6 +127,10 @@ export interface OperationWorkOrder {
* 经销商id
*/
distributorId?: number;
/**
* 订单编号
*/
orderSn?: string;
/**
* 手术订单id
*/
......@@ -127,10 +139,6 @@ export interface OperationWorkOrder {
* 手术订单id
*/
operationOrder?: OperationOrder;
/**
* 订单编号
*/
orderSn?: string;
/**
* 执行人ID
*/
......@@ -159,6 +167,14 @@ export interface OperationWorkOrder {
* 工单类型
*/
orderMode?: String;
/**
* 操作人ID
*/
editorId?: number;
/**
* 操作人
*/
editorName?: string;
/**
* 创建时间
*/
......
......@@ -5,81 +5,66 @@
*/
import { defHttp } from '/@/utils/http/axios';
import { ApiResponse } from '../model/baseModel';
import {
OperationWorkOrder,
OperationWorkOrderParams,
OperationWorkOrderPageResult,
OperationWorkOrderPageResponse,
OperationWorkOrderResponse,
} from '../model/operationWorkOrder';
const baseApi = '/v1/order/operation-work-order';
/**
* 新增
*/
export const add = (entity: OperationWorkOrder) =>
defHttp.post<OperationWorkOrder>({ url: `${baseApi}/`, data: entity });
export const add = (entity: OperationWorkOrder) => defHttp.post<OperationWorkOrder>({ url: `${baseApi}/`, data: entity });
/**
* 更新
*/
export const update = (entity: OperationWorkOrder) =>
defHttp.put<OperationWorkOrder>({ url: `${baseApi}/`, data: entity });
export const update = (entity: OperationWorkOrder) => defHttp.put<OperationWorkOrder>({ url: `${baseApi}/`, data: entity });
/**
* 删除
*/
export const remove = (id: any) =>
defHttp.delete<Number>({ url: `${baseApi}/${id}` });
export const remove = (id: any) => defHttp.delete<Number>({ url: `${baseApi}/${id}` });
/**
* 分页查询
*/
export const search = (params?: OperationWorkOrderParams) =>
defHttp.get<OperationWorkOrderPageResult>({ url: `${baseApi}/search`, params });
export const search = (params?: OperationWorkOrderParams) => defHttp.get<OperationWorkOrderPageResult>({ url: `${baseApi}/search`, params });
/**
* 列表查询
*/
export const all = (params?: OperationWorkOrderParams) =>
defHttp.get<OperationWorkOrderPageResult>({ url: `${baseApi}/all`, params });
export const all = (params?: OperationWorkOrderParams) => defHttp.get<OperationWorkOrderPageResult>({ url: `${baseApi}/all`, params });
/**
* 通过主键查询
*/
export const getById = (id: any) =>
defHttp.get<OperationWorkOrder>({ url: `${baseApi}/${id}` });
export const getById = (id: any) => defHttp.get<OperationWorkOrder>({ url: `${baseApi}/${id}` });
/**
* 单个查询
*/
export const getOne = (params?: OperationWorkOrderParams) =>
defHttp.get<OperationWorkOrder>({ url: `${baseApi}/one`, params });
export const getOne = (params?: OperationWorkOrderParams) => defHttp.get<OperationWorkOrder>({ url: `${baseApi}/one`, params });
/**
* 批量删除
*/
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<OperationWorkOrder>) =>
defHttp.post<boolean>({ url: `${baseApi}/batch-save`, data: entityList });
export const batchAdd = (entityList: Array<OperationWorkOrder>) => defHttp.post<boolean>({ url: `${baseApi}/batch-save`, data: entityList });
/**
* 批量更新
*/
export const batchUpdate = (entityList: Array<OperationWorkOrder>) =>
defHttp.post<boolean>({ url: `${baseApi}/batch-update`, data: entityList });
export const batchUpdate = (entityList: Array<OperationWorkOrder>) => defHttp.post<boolean>({ url: `${baseApi}/batch-update`, data: entityList });
/**
* 查询数量
*/
export const count = (params?: OperationWorkOrderParams) =>
defHttp.get<Number>({ url: `${baseApi}/count`, params });
export const count = (params?: OperationWorkOrderParams) => defHttp.get<Number>({ url: `${baseApi}/count`, params });
<template>
<Card :bordered="false">
<Card :bordered="false" :loading="isLoading">
<Descriptions bordered :column="3">
<Descriptions.Item
v-for="p in displayProps"
......@@ -8,7 +8,7 @@
:span="['avatar'].includes(p.name) ? 3 : 1"
>
<span v-if="p.key === 'avatar'">
<img :src="p.value" style="width: 120px; height: 120px" />
<ImagePreview :imageList="[p.value]" style="width: 120px" />
</span>
<template v-else>
{{ p.value }}
......@@ -18,39 +18,45 @@
</Card>
</template>
<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 { useAsyncState } from '@vueuse/core';
import { ImagePreview } from '/@/components/Preview/index';
import { ComputedRef } from '@vue/reactivity';
import { Descriptions, Card } from 'ant-design-vue';
import { descriptionColumns } from './schema';
import * as OperationWorkOrderApi from '/@/api/order/operationWorkOrderApi';
import { Device } from '/@/api/model/device';
import { OperationWorkOrder } from '/@/api/model/operationWorkOrder';
const route = useRoute();
const id = ref(route.params?.id);
let data = reactive({
detail: {},
isOver: false,
});
const getDetail = () => {
OperationWorkOrderApi.getById(id.value).then((res: Device) => {
data.isOver = true;
data.detail = res;
});
};
// id 查询
const {
state: detail,
isReady: isDetailReady,
isLoading,
execute,
} = useAsyncState(
() => {
return OperationWorkOrderApi.getById(id.value).then((res: OperationWorkOrder) => res);
},
null,
{
immediate: false,
},
);
onMounted(() => {
getDetail();
execute();
});
const displayProps: ComputedRef<Array<any>> = computed(() => {
if (!data.isOver) return {};
if (!isDetailReady.value) return {};
const display: any = descriptionColumns.map(({ title, dataIndex = '', customRender }) => ({
key: dataIndex,
title,
value: customRender
? customRender({ text: data.detail[dataIndex], record: data.detail })
: data.detail[dataIndex],
value: customRender ? customRender({ text: detail.value[dataIndex], record: detail.value }) : detail.value[dataIndex],
}));
return display;
});
......
<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" />
</a-spin>
</BasicDrawer>
</template>
<script lang="ts" setup name="OperationWorkOrderDrawer">
......@@ -8,7 +10,9 @@
import { BasicForm, useForm } from '/@/components/Form/index';
import { formSchema } from './schema';
import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
import { useAsyncState } from '@vueuse/core';
import * as OperationWorkOrderApi from '/@/api/order/operationWorkOrderApi';
import { OperationWorkOrder } from '/@/api/model/operationWorkOrder';
const emit = defineEmits(['success', 'register']);
const isUpdate = ref(true);
......@@ -20,6 +24,22 @@
showActionButtonGroup: false,
});
// id 查询
const {
state: detail,
isReady: isDetailReady,
isLoading,
execute,
} = useAsyncState(
() => {
return OperationWorkOrderApi.getById(entityId.value).then((res: OperationWorkOrder) => res);
},
null,
{
immediate: false,
},
);
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
await resetFields();
setDrawerProps({ confirmLoading: false });
......@@ -27,10 +47,22 @@
entityId.value = data?.record?.id;
if (unref(isUpdate)) {
await setFieldsValue({
...data.record,
operationOrderId: { label: data.record.operation_orderName, value: data.record.operationOrderId },
await execute();
if (detail.value) {
const formData: any = {
...detail.value,
operationOrderId: { label: detail.value.operation_order?.name || '(已删除/不存在)', value: detail.value.operationOrderId },
};
await setFieldsValue(formData);
}
}
});
const getConfirmDisabled = computed(() => {
if (unref(isUpdate)) {
return !unref(isDetailReady);
} else {
return false;
}
});
......
......@@ -8,6 +8,7 @@
<span>已选中{{ checkedKeys.length }}条记录</span>
<a-button type="link" @click="checkedKeys = []" size="small">清空</a-button>
<a-popconfirm
v-auth="'AUTH_ORDER_OPERATION_WORK_ORDER'"
class="ml-4"
title="确定要全部删除吗?"
ok-text="是"
......@@ -27,9 +28,6 @@
<a-button v-auth="'AUTH_ORDER_OPERATION_WORK_ORDER:ADD'" type="primary" @click="handleCreate"> 新增</a-button>
</template>
<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)">
<img :src="text" class="photo" alt="图片" v-if="!!text" />
</template>
......@@ -42,6 +40,12 @@
onClick: handleEdit.bind(null, record),
ifShow: hasPermission('AUTH_ORDER_OPERATION_WORK_ORDER:EDIT'),
},
{
tooltip: '详情',
icon: 'ant-design:eye-outlined',
onClick: handleView.bind(null, record),
ifShow: hasPermission('AUTH_ORDER_OPERATION_WORK_ORDER:QUERY'),
},
{
tooltip: '删除',
icon: 'ant-design:delete-outlined',
......@@ -60,7 +64,7 @@
<OperationWorkOrderDrawer @register="registerDrawer" @success="handleSuccess" />
</div>
</template>
<script lang="ts" setup name="DeviceIndex">
<script lang="ts" setup name="AUTH_ORDER_OPERATION_WORK_ORDER">
import { ref } from 'vue';
import { useGo } from '/@/hooks/web/usePage';
import { usePermission } from '/@/hooks/web/usePermission';
......@@ -75,15 +79,20 @@
const { hasPermission } = usePermission();
const go = useGo();
const { formConfig, showTableSetting, bordered, showIndexColumn } = componentSetting.table;
const {
formConfig,
showTableSetting,
bordered,
showIndexColumn,
} = componentSetting.table;
const checkedKeys = ref<Array<string | number>>([]);
const onSelectChange = (selectedRowKeys: (string | number)[]) => {
checkedKeys.value = selectedRowKeys;
};
}
const [registerDrawer, { openDrawer }] = useDrawer();
const [registerTable, { reload }] = useTable({
const [registerTable, { reload ,setLoading}] = useTable({
title: '手术销售工单表',
api: (params) => OperationWorkOrderApi.search(handleParams(params)),
columns,
......@@ -94,6 +103,7 @@
},
rowSelection: {
type: 'checkbox',
// @ts-ignore
selectedRowKeys: checkedKeys,
onChange: onSelectChange,
},
......@@ -104,10 +114,9 @@
canResize: false,
rowKey: (record: any) => record.id,
actionColumn: {
width: 80,
width: 120,
title: '操作',
dataIndex: 'action',
fixed: 'right',
},
});
......@@ -150,14 +159,20 @@
};
const handleDelete = (record: Recordable) => {
setLoading(true);
OperationWorkOrderApi.remove(record.id).then((_) => {
reload();
}).catch(() => {
setLoading(false);
});
};
const handleBatchDelete = () => {
setLoading(true);
OperationWorkOrderApi.batchRemove(checkedKeys.value).then((_) => {
reload();
}).catch(() => {
setLoading(false);
});
};
......@@ -166,6 +181,6 @@
};
const handleView = (record) => {
go('/order/operation-work-order/' + record.id);
go('/main/order/operation-work-order/' + record.id);
};
</script>
......@@ -12,8 +12,13 @@ import get from 'lodash.get';
import * as OperationOrderApi from '/@/api/order/operationOrderApi';
export enum StatusEnum {
TO_BE_USE = '待使用',
CANCEL = '已取消',
PENDING_REVIEW = '待审核',
PASSED = '已通过',
PASSED = '已推送',
DELIVERED = '已发货',
BACK = '已回库',
CONFIRM = '已确认',
REJECT = '拒绝',
FORBIDDEN = '禁用',
}
......@@ -87,6 +92,22 @@ export const schema = {
table: {
},
},
{
field: 'orderSn',
label: '订单编号',
defaultValue: undefined,
form: {
componentProps: {
allowClear: false,
placeholder: '订单编号',
},
colProps,
component: 'Input',
rules: [{ required: true, message: '请输入订单编号!' }],
},
table: {
},
},
{
field: 'operationOrderId',
label: '手术订单id',
......@@ -110,22 +131,6 @@ export const schema = {
customRender: ({ text, record }) => get(record, 'operationOrder.name') || text,
},
},
{
field: 'orderSn',
label: '订单编号',
defaultValue: undefined,
form: {
componentProps: {
allowClear: false,
placeholder: '订单编号',
},
colProps,
component: 'Input',
rules: [{ required: true, message: '请输入订单编号!' }],
},
table: {
},
},
{
field: 'userId',
label: '执行人ID',
......@@ -249,6 +254,38 @@ export const schema = {
},
},
},
{
field: 'editorId',
label: '操作人ID',
defaultValue: 1,
form: {
componentProps: {
allowClear: false,
placeholder: '操作人ID',
},
colProps,
component: 'InputNumber',
rules: [{ required: true, message: '请输入操作人ID!' }],
},
table: {
},
},
{
field: 'editorName',
label: '操作人',
defaultValue: 'admin',
form: {
componentProps: {
allowClear: false,
placeholder: '操作人',
},
colProps,
component: 'Input',
rules: [{ required: true, message: '请输入操作人!' }],
},
table: {
},
},
{
field: 'createTime',
label: '创建时间',
......@@ -288,10 +325,10 @@ export const schema = {
],
};
const queryFields = ['id','distributorId','operationOrderId','orderSn','userId','realName','status','remark','endTime','deleteStatus','orderMode','createTime','updateTime'];
const editFields = ['distributorId','operationOrderId','orderSn','userId','realName','status','remark','endTime','deleteStatus','orderMode'];
const tableFields = ['id','distributorId','operationOrderId','orderSn','userId','realName','status','remark','endTime','deleteStatus','orderMode','createTime','updateTime'];
const descriptionFields = ['id','distributorId','operationOrderId','orderSn','userId','realName','status','remark','endTime','deleteStatus','orderMode','createTime','updateTime'];
const queryFields = ['id','distributorId','orderSn','operationOrderId','userId','realName','status','remark','endTime','deleteStatus','orderMode','editorId','editorName','createTime','updateTime'];
const editFields = ['distributorId','orderSn','operationOrderId','userId','realName','status','remark','endTime','deleteStatus','orderMode'];
const tableFields = ['id','distributorId','orderSn','operationOrderId','userId','realName','status','remark','endTime','deleteStatus','orderMode','editorId','editorName','createTime','updateTime'];
const descriptionFields = ['id','distributorId','orderSn','operationOrderId','userId','realName','status','remark','endTime','deleteStatus','orderMode','editorId','editorName','createTime','updateTime'];
export const searchFormSchema: FormSchema[] = schema.properties.filter(item => queryFields.includes(item.field))
.map(
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论