lzq 2026-01-29 22:54:23 +08:00
parent 0b80fceef8
commit d4b59555d6
8 changed files with 50 additions and 27 deletions

17
package-lock.json generated
View File

@ -81,7 +81,6 @@
"integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.28.6", "@babel/code-frame": "^7.28.6",
"@babel/generator": "^7.28.6", "@babel/generator": "^7.28.6",
@ -1064,7 +1063,6 @@
"integrity": "sha512-cD/0UU9RQmlnTbmyJTDyzN8f6CzpziDLv3tFQCnwl0Aoxt3KmFu4k/XA4Sogxqj7jJ/3cdX1kL+Lnsh34sxcQQ==", "integrity": "sha512-cD/0UU9RQmlnTbmyJTDyzN8f6CzpziDLv3tFQCnwl0Aoxt3KmFu4k/XA4Sogxqj7jJ/3cdX1kL+Lnsh34sxcQQ==",
"devOptional": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"c12": "^3.3.3", "c12": "^3.3.3",
"consola": "^3.4.2", "consola": "^3.4.2",
@ -1818,7 +1816,6 @@
"resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
"integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@types/lodash": "*" "@types/lodash": "*"
} }
@ -1836,7 +1833,6 @@
"integrity": "sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==", "integrity": "sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"undici-types": "~7.16.0" "undici-types": "~7.16.0"
} }
@ -2489,7 +2485,6 @@
} }
], ],
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"baseline-browser-mapping": "^2.9.0", "baseline-browser-mapping": "^2.9.0",
"caniuse-lite": "^1.0.30001759", "caniuse-lite": "^1.0.30001759",
@ -3833,15 +3828,13 @@
"version": "4.17.23", "version": "4.17.23",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
"integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
"license": "MIT", "license": "MIT"
"peer": true
}, },
"node_modules/lodash-es": { "node_modules/lodash-es": {
"version": "4.17.23", "version": "4.17.23",
"resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz",
"integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==", "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==",
"license": "MIT", "license": "MIT"
"peer": true
}, },
"node_modules/lodash-unified": { "node_modules/lodash-unified": {
"version": "1.0.3", "version": "1.0.3",
@ -4328,7 +4321,6 @@
"resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.4.tgz", "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.4.tgz",
"integrity": "sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==", "integrity": "sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@vue/devtools-api": "^7.7.7" "@vue/devtools-api": "^7.7.7"
}, },
@ -4401,7 +4393,6 @@
} }
], ],
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"nanoid": "^3.3.11", "nanoid": "^3.3.11",
"picocolors": "^1.1.1", "picocolors": "^1.1.1",
@ -5042,7 +5033,6 @@
"integrity": "sha512-ZIdT8eUv8tegmqy1tTIdJv9We2DumkNZFdCF5mz/Kpq3OcTaxSuCAYZge6HKK2CmNC02G1eJig2RV7XTw5hQrA==", "integrity": "sha512-ZIdT8eUv8tegmqy1tTIdJv9We2DumkNZFdCF5mz/Kpq3OcTaxSuCAYZge6HKK2CmNC02G1eJig2RV7XTw5hQrA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@adobe/css-tools": "~4.3.3", "@adobe/css-tools": "~4.3.3",
"debug": "^4.3.2", "debug": "^4.3.2",
@ -5149,7 +5139,6 @@
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
"devOptional": true, "devOptional": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"peer": true,
"bin": { "bin": {
"tsc": "bin/tsc", "tsc": "bin/tsc",
"tsserver": "bin/tsserver" "tsserver": "bin/tsserver"
@ -5573,7 +5562,6 @@
"integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"esbuild": "^0.27.0", "esbuild": "^0.27.0",
"fdir": "^6.5.0", "fdir": "^6.5.0",
@ -5852,7 +5840,6 @@
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.27.tgz", "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.27.tgz",
"integrity": "sha512-aJ/UtoEyFySPBGarREmN4z6qNKpbEguYHMmXSiOGk69czc+zhs0NF6tEFrY8TZKAl8N/LYAkd4JHVd5E/AsSmw==", "integrity": "sha512-aJ/UtoEyFySPBGarREmN4z6qNKpbEguYHMmXSiOGk69czc+zhs0NF6tEFrY8TZKAl8N/LYAkd4JHVd5E/AsSmw==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@vue/compiler-dom": "3.5.27", "@vue/compiler-dom": "3.5.27",
"@vue/compiler-sfc": "3.5.27", "@vue/compiler-sfc": "3.5.27",

View File

@ -11,9 +11,9 @@ export type EnhancedEnum<T> = T & {
[key in `${T[number]['val']}Txt`]: T[number]['txt'] [key in `${T[number]['val']}Txt`]: T[number]['txt']
} & { } & {
// @ts-ignore // @ts-ignore
of: (val: string) => T[number] | undefined of: (val?: string) => T[number] | undefined
// @ts-ignore // @ts-ignore
txt: (val: T[number]['val']) => T[number]['txt'] txt: (val?: string) => T[number]['txt'] | undefined
} }
export function createEnum<T>(enums: T): EnhancedEnum<T> { export function createEnum<T>(enums: T): EnhancedEnum<T> {
@ -25,6 +25,8 @@ export function createEnum<T>(enums: T): EnhancedEnum<T> {
e[enumItem.val + 'Txt'] = enumItem.txt e[enumItem.val + 'Txt'] = enumItem.txt
} }
// @ts-ignore // @ts-ignore
e.of = (val: string) => ((enums as EnumItem[]).find((item) => item.val === val)) e.of = (val?: string) => ((enums as EnumItem[]).find((item) => item.val === val))
// @ts-ignore
e.txt = (val?: string) => ((enums as EnumItem[]).find((item) => item.val === val)?.txt)
return e return e
} }

View File

@ -6,10 +6,14 @@ const props = withDefaults(defineProps<{
show: boolean show: boolean
title: string title: string
width?: string width?: string
modal?: boolean
appendToBody?: boolean
closed?: () => void closed?: () => void
}>(), { }>(), {
width: 'fit-content', width: 'fit-content',
closeOnSuccess: true, closeOnSuccess: true,
modal: false,
appendToBody: false,
closeBtnText: '关闭', closeBtnText: '关闭',
submitBtnText: '提交', submitBtnText: '提交',
closed() { closed() {
@ -66,7 +70,8 @@ onUnmounted(() => {
<template> <template>
<ElDialog <ElDialog
:close-on-click-modal="false" :close-on-click-modal="false"
:modal="false" :append-to-body="appendToBody"
:modal="modal"
:modal-class="modalClass" :modal-class="modalClass"
:model-value="showDialog" :model-value="showDialog"
:title="title" :title="title"

View File

@ -146,7 +146,7 @@ const displayData = computed(() => {
trigger="click" trigger="click"
@visible-change="visibleChangeHandler"> @visible-change="visibleChangeHandler">
<ElInput :model-value="displayData" :placeholder="placeholder" readonly> <ElInput :model-value="displayData" :placeholder="placeholder" readonly>
<template #append> <template #suffix>
<ElIcon class="clear-btn" @click.stop="onClear"> <ElIcon class="clear-btn" @click.stop="onClear">
<ElIconCircleClose/> <ElIconCircleClose/>
</ElIcon> </ElIcon>

View File

@ -17,6 +17,8 @@ const props = withDefaults(
rules?: Partial<Record<string, Arrayable<FormItemRule>>> rules?: Partial<Record<string, Arrayable<FormItemRule>>>
labelWidth?: string labelWidth?: string
width?: string width?: string
modal?: boolean
appendToBody?: boolean
}>(), }>(),
{ {
rules: () => ({} as Partial<Record<string, Arrayable<FormItemRule>>>), rules: () => ({} as Partial<Record<string, Arrayable<FormItemRule>>>),
@ -71,6 +73,8 @@ defineExpose({
:submit-handler="submitHandler" :submit-handler="submitHandler"
:title="title" :title="title"
:width="width" :width="width"
:append-to-body="appendToBody"
:modal="modal"
> >
<ElForm <ElForm
ref="formRef" ref="formRef"

View File

@ -5,6 +5,7 @@
// ------ // ------
// Generated by unplugin-vue-components // Generated by unplugin-vue-components
// Read more: https://github.com/vuejs/core/pull/3399 // Read more: https://github.com/vuejs/core/pull/3399
import { GlobalComponents } from 'vue'
export {} export {}

View File

@ -41,11 +41,11 @@
:value="item.val"/> :value="item.val"/>
</ElSelect> </ElSelect>
</ElFormItem> </ElFormItem>
<ElFormItem label="税率" prop="taxRate">
<ElInputNumber v-model="formData.taxRate" :max="100" :min="0" :precision="2" :step="0.01" controls-position="right"/>
</ElFormItem>
<ElFormItem v-if="formData.expenseStrategy === expenseStrategy.TanXing" label="起步价" prop="initialPrice"> <ElFormItem v-if="formData.expenseStrategy === expenseStrategy.TanXing" label="起步价" prop="initialPrice">
<ElInputNumber v-model="formData.initialPrice" :min="0" :precision="2" :step="1" controls-position="right"/> <ElInputNumber v-model="formData.initialPrice" :min="0" :precision="2" :step="1" controls-position="right">
<template #suffix>/{{ unit.txt(formData.unit) }}</template>
</ElInputNumber>
</ElFormItem> </ElFormItem>
<ElFormItem v-if="formData.expenseStrategy === expenseStrategy.TanXing" label="起步量" prop="initialQuantity"> <ElFormItem v-if="formData.expenseStrategy === expenseStrategy.TanXing" label="起步量" prop="initialQuantity">
<ElInputNumber v-model="formData.initialQuantity" :min="0" :step="1" controls-position="right"/> <ElInputNumber v-model="formData.initialQuantity" :min="0" :step="1" controls-position="right"/>
@ -54,11 +54,18 @@
v-if="formData.expenseStrategy !== expenseStrategy.MianFei" v-if="formData.expenseStrategy !== expenseStrategy.MianFei"
:label="formData.expenseStrategy === expenseStrategy.TanXing?'每档单价':(formData.expenseStrategy === expenseStrategy.DanJia?'单价':'价格')" :label="formData.expenseStrategy === expenseStrategy.TanXing?'每档单价':(formData.expenseStrategy === expenseStrategy.DanJia?'单价':'价格')"
prop="unitPrice"> prop="unitPrice">
<ElInputNumber v-model="formData.unitPrice" :min="0" :precision="2" :step="1" controls-position="right"/> <ElInputNumber v-model="formData.unitPrice" :min="0" :precision="2" :step="1" controls-position="right">
<template #suffix>/{{ unit.txt(formData.unit) }}</template>
</ElInputNumber>
</ElFormItem> </ElFormItem>
<ElFormItem v-if="formData.expenseStrategy === expenseStrategy.TanXing" label="每档的量" prop="everyQuantity"> <ElFormItem v-if="formData.expenseStrategy === expenseStrategy.TanXing" label="每档的量" prop="everyQuantity">
<ElInputNumber v-model="formData.everyQuantity" :min="0" :step="1" controls-position="right"/> <ElInputNumber v-model="formData.everyQuantity" :min="0" :step="1" controls-position="right"/>
</ElFormItem> </ElFormItem>
<ElFormItem v-if="formData.expenseStrategy !== expenseStrategy.MianFei" label="税率" prop="taxRate">
<ElInputNumber v-model="formData.taxRate" :max="100" :min="0" :precision="2" :step="0.01" controls-position="right">
<template #suffix>%</template>
</ElInputNumber>
</ElFormItem>
<ElFormItem label="排序" prop="sort"> <ElFormItem label="排序" prop="sort">
<ElInputNumber v-model="formData.sort" controls-position="right" placeholder="请输入排序"/> <ElInputNumber v-model="formData.sort" controls-position="right" placeholder="请输入排序"/>
</ElFormItem> </ElFormItem>
@ -104,12 +111,17 @@ const rules = reactive<FormRules<GoodsTypes.SearchGoodsResult>>({
picture: [ {required: true, message: '请填写图片', trigger: 'blur'} ], picture: [ {required: true, message: '请填写图片', trigger: 'blur'} ],
unit: [ {required: true, message: '请填写计量单位', trigger: 'blur'} ], unit: [ {required: true, message: '请填写计量单位', trigger: 'blur'} ],
sort: [ {required: true, message: '请填写排序', trigger: 'blur'} ], sort: [ {required: true, message: '请填写排序', trigger: 'blur'} ],
initialPrice: [ {required: true, message: '请填写排序', trigger: 'blur'} ],
}) })
function detailsLoader(id?: string) { function detailsLoader(id?: string) {
if (Strings.isBlank(id)) { if (Strings.isBlank(id)) {
status.value = 'add' status.value = 'add'
return Promise.resolve() return Promise.resolve({
expenseStrategy: expenseStrategy.MianFei,
unit: unit.Dun,
canuse: true,
})
} else { } else {
status.value = 'modify' status.value = 'modify'

View File

@ -41,6 +41,18 @@ declare global {
canuse?: boolean canuse?: boolean
// 备注 // 备注
memo?: string memo?: string
// 计费策略
expenseStrategy?: string
// 税率
taxRate?: number
// 单价
unitPrice?: number
// 起步价
initialPrice?: number
// 起步量
initialQuantity?: number
// 每档的量
everyQuantity?: number
// 创建人 Idsys_user.id // 创建人 Idsys_user.id
creatorId?: string creatorId?: string
// 修改人 Idsys_user.id // 修改人 Idsys_user.id