sparkles: 先选类型再选物料
Some checks failed
Release / lint (push) Successful in 48s
Release / Release (push) Failing after 54s

This commit is contained in:
my_ong 2025-03-04 12:09:58 +08:00
parent 541fc2ff8a
commit 7ce15ddf0e
7 changed files with 98 additions and 33 deletions

View File

@ -3961,7 +3961,23 @@
"enum": [],
"typeProperties": []
},
"parameters": []
"parameters": [
{
"description": "类型",
"required": false,
"in": "query",
"name": "type",
"dataType": {
"typeArgs": [],
"typeName": "string",
"isDefsType": false,
"templateIndex": -1,
"compileTemplateKeyword": "#/definitions/",
"enum": [],
"typeProperties": []
}
}
]
},
{
"description": "物料详情",
@ -4497,11 +4513,11 @@
{
"dataType": {
"typeArgs": [],
"typeName": "",
"typeName": "boolean",
"isDefsType": false,
"templateIndex": -1,
"compileTemplateKeyword": "#/definitions/",
"enum": ["'LOW_VALUE'", "'HIGH_VALUE'"],
"enum": [],
"typeProperties": []
},
"name": "assignRule",

View File

@ -42,7 +42,7 @@ declare namespace material {
applyId?: number
/** assignRule */
assignRule?: 'LOW_VALUE' | 'HIGH_VALUE'
assignRule?: boolean
/** 确认数量 */
confirmQuantity?: number

View File

@ -1,18 +1,26 @@
/**
* @desc
*/
import { defaultSuccess, defaultError, http } from '@/plugins/axios';
import type { AxiosResponse } from 'axios';
import { defaultSuccess, defaultError, http } from '@/plugins/axios'
import type { AxiosResponse } from 'axios'
export interface Params {
/** 类型 */
type?: string
}
export default async function (
params: Params,
success: (data: Array<material.Material>) => void = defaultSuccess,
fail: (error: { code: string; error?: string }) => void = defaultError,
): Promise<void> {
return http({
method: 'get',
url: `/material/list`,
params,
})
.then((data: AxiosResponse<Array<material.Material>, unknown>) => {
success(data.data);
success(data.data)
})
.catch((error: { code: string; error?: string }) => fail(error));
.catch((error: { code: string; error?: string }) => fail(error))
}

2
src/components.d.ts vendored
View File

@ -11,6 +11,7 @@ declare module 'vue' {
AAvatar: typeof import('ant-design-vue/es')['Avatar']
AButton: typeof import('ant-design-vue/es')['Button']
ACard: typeof import('ant-design-vue/es')['Card']
ACascader: typeof import('ant-design-vue/es')['Cascader']
ACol: typeof import('ant-design-vue/es')['Col']
AConfigProvider: typeof import('ant-design-vue/es')['ConfigProvider']
ADatePicker: typeof import('ant-design-vue/es')['DatePicker']
@ -56,6 +57,7 @@ declare module 'vue' {
ATooltip: typeof import('ant-design-vue/es')['Tooltip']
ATransfer: typeof import('ant-design-vue/es')['Transfer']
ATree: typeof import('ant-design-vue/es')['Tree']
ATreeSelect: typeof import('ant-design-vue/es')['TreeSelect']
ATypographyLink: typeof import('ant-design-vue/es')['TypographyLink']
ATypographyParagraph: typeof import('ant-design-vue/es')['TypographyParagraph']
ATypographyTitle: typeof import('ant-design-vue/es')['TypographyTitle']

View File

@ -17,18 +17,31 @@
<a-date-picker v-model:value="formData.applyDate" />
</a-form-item>
<a-form-item label="选择物料" name="selected">
<div style="display: flex; justify-content: space-between">
<a-tree-select
v-model:value="typeVal"
show-search
style="width: 49%"
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
placeholder="请选择物料类型"
allow-clear
tree-default-expand-all
:tree-data="types"
tree-node-filter-prop="label"
/>
<a-select
v-model:value="formData.slectedList"
mode="multiple"
bordered
placeholder="请选择物料"
style="width: 40%"
style="width: 49%"
show-search
:options="options"
:filter-option="filterOption"
@deselect="removeEvent($event)"
@select="insertEvent($event)"
></a-select>
</div>
</a-form-item>
</a-form>
</div>
@ -84,6 +97,7 @@
import dayjs, { Dayjs } from 'dayjs'
import { LabeledValue, DefaultOptionType } from 'ant-design-vue/es/select'
import { SelectHandler } from 'ant-design-vue/es/vc-select/Select'
import { TreeDataNode } from 'ant-design-vue/es/vc-tree-select/interface'
//
const props = defineProps(
@ -115,7 +129,6 @@
applyType: string //
slectedList: number[] //
}
const formData = ref<FormData>({
applicant: '',
applyDate: dayjs(),
@ -123,6 +136,20 @@
slectedList: [],
})
//
const types = ref<Array<TreeDataNode>>([])
api.materialApi.type.trees((data) => {
types.value = children(data)
})
const children = (res: Array<material.TypeTree>): Array<TreeDataNode> => {
return res.map((areaTree) => ({
label: areaTree.label,
value: areaTree.value,
children: areaTree.children ? children(areaTree.children) : [],
key: areaTree.value,
}))
}
// vxe-table
export interface RowVO {
id: number
@ -139,18 +166,28 @@
const tableRef = ref<VxeTableInstance<RowVO>>()
// vxe-table
const tableData = ref<Array<RowVO>>([])
//
const typeVal = ref('')
const options = ref<{ label: string; value: number }[]>([])
const materialList = ref<material.Material[]>([])
const getMaterialList = async () => {
await api.materialApi.material.all((data) => {
await api.materialApi.material.all({ type: typeVal.value }, (data) => {
materialList.value = data
})
options.value = materialList.value.map((item) => {
return { label: item.name ? item.name : '未知', value: item.id ? item.id : -1 }
})
}
watch(
typeVal,
(newVal) => {
if (newVal !== '') {
getMaterialList()
}
},
{ immediate: true, deep: true },
)
//
// value: number, option: { label: string, value: number }

View File

@ -35,6 +35,7 @@ export const formItems = (types: TreeDataNode[]): FormItem[] => [
},
rules: [],
},
{
type: 'tree-select',
group: 'form',

View File

@ -24,6 +24,7 @@ export const formItems = (levels: Codebook[]): FormItem[] => [
label: '类型编码',
name: 'no',
required: true,
help: '格式一级编码两位组成00-99取值只要保证唯一即可二级编码四位组成,父级的两位+00-99取值只要保证唯一即可',
},
properties: {
size: 'default',