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

View File

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

View File

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

View File

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

View File

@ -5,6 +5,7 @@
// ------
// Generated by unplugin-vue-components
// Read more: https://github.com/vuejs/core/pull/3399
import { GlobalComponents } from 'vue'
export {}
@ -109,4 +110,4 @@ declare global {
const ElUpload: typeof import('element-plus/es')['ElUpload']
const RouterLink: typeof import('vue-router')['RouterLink']
const RouterView: typeof import('vue-router')['RouterView']
}
}

View File

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

View File

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