优化追溯
This commit is contained in:
60
src/apis/workOrder/workOrder.ts
Normal file
60
src/apis/workOrder/workOrder.ts
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
import http from '@/utils/http'
|
||||||
|
|
||||||
|
const BASE_URL = '/weighManage/workOrder'
|
||||||
|
|
||||||
|
export interface WorkOrderResp {
|
||||||
|
id: string
|
||||||
|
title: string
|
||||||
|
materialName: string
|
||||||
|
encoding: string
|
||||||
|
unitWeight: string
|
||||||
|
materialSpec: string
|
||||||
|
photoUrl: string
|
||||||
|
totalWeight: string
|
||||||
|
totalCount: string
|
||||||
|
workOrderInfos: Array<WorkOrderInfoResp>
|
||||||
|
createUserString: string
|
||||||
|
updateUserString: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface WorkOrderInfoResp {
|
||||||
|
id: string
|
||||||
|
workOrderId: string
|
||||||
|
materialId: string
|
||||||
|
weightTime: string
|
||||||
|
quantity: string
|
||||||
|
weight: string
|
||||||
|
calculatedWeight: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface WorkOrderQuery {
|
||||||
|
orderNo: string | undefined
|
||||||
|
materialName: string | undefined
|
||||||
|
encoding: string | undefined
|
||||||
|
userName: string | undefined
|
||||||
|
carNo: string | undefined
|
||||||
|
startDate: string | undefined
|
||||||
|
endDate: string | undefined
|
||||||
|
sort: Array<string>
|
||||||
|
}
|
||||||
|
export interface WorkOrderPageQuery extends WorkOrderQuery, PageQuery {}
|
||||||
|
|
||||||
|
/** @desc 查询工作订单列表 */
|
||||||
|
export function listWorkOrder(query: WorkOrderPageQuery) {
|
||||||
|
return http.get<PageRes<WorkOrderResp[]>>(`${BASE_URL}`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询工作订单详情 */
|
||||||
|
export function getWorkOrder(id: string) {
|
||||||
|
return http.get<WorkOrderResp>(`${BASE_URL}/${id}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 删除工作订单 */
|
||||||
|
export function deleteWorkOrder(ids: string | Array<string>) {
|
||||||
|
return http.del(`${BASE_URL}/${ids}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 导出工作订单 */
|
||||||
|
export function exportWorkOrder(query: WorkOrderQuery) {
|
||||||
|
return http.download(`${BASE_URL}/export`, query)
|
||||||
|
}
|
||||||
4
src/types/components.d.ts
vendored
4
src/types/components.d.ts
vendored
@@ -15,8 +15,10 @@ declare module 'vue' {
|
|||||||
AButton: typeof import('@arco-design/web-vue')['Button']
|
AButton: typeof import('@arco-design/web-vue')['Button']
|
||||||
ACard: typeof import('@arco-design/web-vue')['Card']
|
ACard: typeof import('@arco-design/web-vue')['Card']
|
||||||
ACheckbox: typeof import('@arco-design/web-vue')['Checkbox']
|
ACheckbox: typeof import('@arco-design/web-vue')['Checkbox']
|
||||||
|
ACheckboxGroup: typeof import('@arco-design/web-vue')['CheckboxGroup']
|
||||||
ACol: typeof import('@arco-design/web-vue')['Col']
|
ACol: typeof import('@arco-design/web-vue')['Col']
|
||||||
AConfigProvider: typeof import('@arco-design/web-vue')['ConfigProvider']
|
AConfigProvider: typeof import('@arco-design/web-vue')['ConfigProvider']
|
||||||
|
ADatePicker: typeof import('@arco-design/web-vue')['DatePicker']
|
||||||
ADescriptions: typeof import('@arco-design/web-vue')['Descriptions']
|
ADescriptions: typeof import('@arco-design/web-vue')['Descriptions']
|
||||||
ADescriptionsItem: typeof import('@arco-design/web-vue')['DescriptionsItem']
|
ADescriptionsItem: typeof import('@arco-design/web-vue')['DescriptionsItem']
|
||||||
ADivider: typeof import('@arco-design/web-vue')['Divider']
|
ADivider: typeof import('@arco-design/web-vue')['Divider']
|
||||||
@@ -62,9 +64,11 @@ declare module 'vue' {
|
|||||||
ATabPane: typeof import('@arco-design/web-vue')['TabPane']
|
ATabPane: typeof import('@arco-design/web-vue')['TabPane']
|
||||||
ATabs: typeof import('@arco-design/web-vue')['Tabs']
|
ATabs: typeof import('@arco-design/web-vue')['Tabs']
|
||||||
ATag: typeof import('@arco-design/web-vue')['Tag']
|
ATag: typeof import('@arco-design/web-vue')['Tag']
|
||||||
|
ATextarea: typeof import('@arco-design/web-vue')['Textarea']
|
||||||
ATooltip: typeof import('@arco-design/web-vue')['Tooltip']
|
ATooltip: typeof import('@arco-design/web-vue')['Tooltip']
|
||||||
ATree: typeof import('@arco-design/web-vue')['Tree']
|
ATree: typeof import('@arco-design/web-vue')['Tree']
|
||||||
ATreeSelect: typeof import('@arco-design/web-vue')['TreeSelect']
|
ATreeSelect: typeof import('@arco-design/web-vue')['TreeSelect']
|
||||||
|
ATrigger: typeof import('@arco-design/web-vue')['Trigger']
|
||||||
ATypographyParagraph: typeof import('@arco-design/web-vue')['TypographyParagraph']
|
ATypographyParagraph: typeof import('@arco-design/web-vue')['TypographyParagraph']
|
||||||
ATypographyTitle: typeof import('@arco-design/web-vue')['TypographyTitle']
|
ATypographyTitle: typeof import('@arco-design/web-vue')['TypographyTitle']
|
||||||
AUpload: typeof import('@arco-design/web-vue')['Upload']
|
AUpload: typeof import('@arco-design/web-vue')['Upload']
|
||||||
|
|||||||
@@ -102,6 +102,7 @@ import { DisEnableStatusList } from '@/constant/common'
|
|||||||
import { useDownload, useResetReactive, useTable } from '@/hooks'
|
import { useDownload, useResetReactive, useTable } from '@/hooks'
|
||||||
import { isMobile } from '@/utils'
|
import { isMobile } from '@/utils'
|
||||||
import has from '@/utils/has'
|
import has from '@/utils/has'
|
||||||
|
import type {ColumnItem} from "@/components/GiForm";
|
||||||
|
|
||||||
defineOptions({ name: 'SystemUser' })
|
defineOptions({ name: 'SystemUser' })
|
||||||
|
|
||||||
|
|||||||
198
src/views/workOrder/index.vue
Normal file
198
src/views/workOrder/index.vue
Normal file
@@ -0,0 +1,198 @@
|
|||||||
|
<template>
|
||||||
|
<div class="gi_table_page">
|
||||||
|
<GiTable
|
||||||
|
row-key="id"
|
||||||
|
:data="dataList"
|
||||||
|
:columns="columns"
|
||||||
|
:loading="loading"
|
||||||
|
:scroll="{ x: '100%', y: '100%', minWidth: 1600 }"
|
||||||
|
:pagination="pagination"
|
||||||
|
:disabled-tools="['size']"
|
||||||
|
:disabled-column-keys="['name']"
|
||||||
|
:selected-keys="selectedKeys"
|
||||||
|
:row-selection="{ type: 'checkbox', showCheckedAll: true }"
|
||||||
|
@select-all="selectAll"
|
||||||
|
@select="select"
|
||||||
|
@refresh="search"
|
||||||
|
>
|
||||||
|
<template #toolbar-left>
|
||||||
|
<a-input-search v-model="queryForm.userName" placeholder="请输入姓名" allow-clear @search="search" />
|
||||||
|
<a-input-search v-model="queryForm.carNo" placeholder="请输入人员卡号" allow-clear @search="search" />
|
||||||
|
<a-input-search v-model="queryForm.orderNo" placeholder="请输入订单号" allow-clear @search="search" />
|
||||||
|
<a-input-search v-model="queryForm.materialName" placeholder="请输入物料名称" allow-clear @search="search" />
|
||||||
|
<a-input-search v-model="queryForm.encoding" placeholder="请输入物料编码" allow-clear @search="search" />
|
||||||
|
<a-date-picker
|
||||||
|
v-model="queryForm.startDate"
|
||||||
|
placeholder="请选择开始时间"
|
||||||
|
show-time
|
||||||
|
format="YYYY-MM-DD HH:mm:ss"
|
||||||
|
style="height: 32px"
|
||||||
|
@change="search"
|
||||||
|
/>
|
||||||
|
<a-date-picker
|
||||||
|
v-model="queryForm.endDate"
|
||||||
|
placeholder="请选择结束时间"
|
||||||
|
show-time
|
||||||
|
format="YYYY-MM-DD HH:mm:ss"
|
||||||
|
style="height: 32px"
|
||||||
|
@change="search"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<a-button @click="reset">
|
||||||
|
<template #icon><icon-refresh /></template>
|
||||||
|
<template #default>重置</template>
|
||||||
|
</a-button>
|
||||||
|
</template>
|
||||||
|
<template #toolbar-right>
|
||||||
|
<a-button v-permission="['workOrder:record:delete']" type="outline" status="danger" @click="onDelete">
|
||||||
|
<template #icon><icon-delete /></template>
|
||||||
|
<template #default>删除</template>
|
||||||
|
</a-button>
|
||||||
|
<a-button v-permission="['workOrder:record:export']" @click="onExport">
|
||||||
|
<template #icon><icon-download /></template>
|
||||||
|
<template #default>导出</template>
|
||||||
|
</a-button>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template #photoUrl="{ record }">
|
||||||
|
<a-image :src="record.photoUrl" width="55" />
|
||||||
|
</template>
|
||||||
|
<template #unitWeight="{ record }">
|
||||||
|
{{ record.unitWeight + 'g' }}
|
||||||
|
</template>
|
||||||
|
<template #totalWeight="{ record }">
|
||||||
|
{{ record.totalWeight + 'g' }}
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template #action="{ record }">
|
||||||
|
<a-space>
|
||||||
|
<a-link v-permission="['workOrder:record:detail']" title="详情" @click="onDetail(record)">详情</a-link>
|
||||||
|
<a-link v-permission="['workOrder:record:delete']" status="danger" :title="'删除'" @click="onDeleteOne(record.id)">删除</a-link>
|
||||||
|
</a-space>
|
||||||
|
</template>
|
||||||
|
</GiTable>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import type { TableInstanceColumns } from '@/components/GiTable/type'
|
||||||
|
import { useDownload, useTable } from '@/hooks'
|
||||||
|
import { isMobile } from '@/utils'
|
||||||
|
import has from '@/utils/has'
|
||||||
|
import type GiTable from "@/components/GiTable/index.vue";
|
||||||
|
import {ref} from "vue";
|
||||||
|
import {Message} from "@arco-design/web-vue";
|
||||||
|
import {
|
||||||
|
deleteWorkOrder,
|
||||||
|
exportWorkOrder,
|
||||||
|
listWorkOrder,
|
||||||
|
type WorkOrderQuery,
|
||||||
|
type WorkOrderResp
|
||||||
|
} from "@/apis/workOrder/workOrder";
|
||||||
|
|
||||||
|
defineOptions({ name: 'Record' })
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const queryForm = reactive<WorkOrderQuery>({
|
||||||
|
orderNo: undefined,
|
||||||
|
materialName: undefined,
|
||||||
|
encoding: undefined,
|
||||||
|
userName: undefined,
|
||||||
|
carNo: undefined,
|
||||||
|
startDate: undefined,
|
||||||
|
endDate: undefined,
|
||||||
|
sort: ['w.id,desc']
|
||||||
|
})
|
||||||
|
|
||||||
|
const {
|
||||||
|
tableData: dataList,
|
||||||
|
loading,
|
||||||
|
pagination,
|
||||||
|
selectedKeys,
|
||||||
|
select,
|
||||||
|
selectAll,
|
||||||
|
search,
|
||||||
|
handleDelete,
|
||||||
|
} = useTable((page) => listWorkOrder({ ...queryForm, ...page }), { immediate: true })
|
||||||
|
|
||||||
|
// 创建工具函数统一处理列配置
|
||||||
|
const processColumns = (columns: TableInstanceColumns[]): TableInstanceColumns[] => {
|
||||||
|
return columns.map(column => {
|
||||||
|
const defaultConfig = {
|
||||||
|
ellipsis: true,
|
||||||
|
tooltip: true
|
||||||
|
};
|
||||||
|
return { ...defaultConfig, ...column };
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 定义列配置,使用工具函数处理
|
||||||
|
const columns = ref<TableInstanceColumns[]>(processColumns([
|
||||||
|
{ title: '创建人', dataIndex: 'createUserString' },
|
||||||
|
{ title: '卡号', dataIndex: 'cardNo' },
|
||||||
|
{ title: '标题', dataIndex: 'title', width: 180 },
|
||||||
|
{ title: '物料图片', dataIndex: 'photoUrl', slotName: 'photoUrl', minWidth: 180, ellipsis: true, tooltip: true },
|
||||||
|
{ title: '物料名称', dataIndex: 'materialName' },
|
||||||
|
{ title: '物料编码', dataIndex: 'encoding' },
|
||||||
|
{ title: '单位克重', dataIndex: 'unitWeight' ,slotName: 'unitWeight'},
|
||||||
|
{ title: '总重量', dataIndex: 'totalWeight' ,slotName: 'totalWeight'},
|
||||||
|
{ title: '称重次数', dataIndex: 'totalCount' },
|
||||||
|
{ title: '创建时间', dataIndex: 'createTime', width: 180 },
|
||||||
|
{
|
||||||
|
title: '操作',
|
||||||
|
dataIndex: 'action',
|
||||||
|
slotName: 'action',
|
||||||
|
width: 160,
|
||||||
|
align: 'center',
|
||||||
|
fixed: !isMobile() ? 'right' : undefined,
|
||||||
|
show: has.hasPermOr(['workOrder:record:detail', 'workOrder:record:update', 'workOrder:record:delete'])
|
||||||
|
}
|
||||||
|
]))
|
||||||
|
|
||||||
|
// 重置
|
||||||
|
const reset = () => {
|
||||||
|
queryForm.orderNo = undefined
|
||||||
|
queryForm.materialName = undefined
|
||||||
|
queryForm.encoding = undefined
|
||||||
|
queryForm.userName = undefined
|
||||||
|
queryForm.carNo = undefined
|
||||||
|
queryForm.startDate = undefined
|
||||||
|
queryForm.endDate = undefined
|
||||||
|
search()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 详情
|
||||||
|
const onDetail = (record: WorkOrderResp) => {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除
|
||||||
|
const onDeleteOne = (id) => {
|
||||||
|
return handleDelete(() => deleteWorkOrder(id), {
|
||||||
|
content: `是否确定删除该条数据?`,
|
||||||
|
showModal: true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除
|
||||||
|
const onDelete = () => {
|
||||||
|
if (!selectedKeys.value.length) {
|
||||||
|
return Message.warning('请选择数据')
|
||||||
|
}
|
||||||
|
return handleDelete(() => deleteWorkOrder(selectedKeys.value), {
|
||||||
|
content: `是否确定删除选中的 ${selectedKeys.value.length} 条数据?`,
|
||||||
|
showModal: true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出
|
||||||
|
const onExport = () => {
|
||||||
|
useDownload(() => exportWorkOrder(queryForm))
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
||||||
Reference in New Issue
Block a user