feat(stock): 优化库存筛选功能
- 添加操作符选择下拉菜单,支持多种筛选条件 - 重构筛选逻辑,提高可维护性 - 优化表单样式,提升用户体验 - 新增国际化支持,添加操作符的中文翻译
This commit is contained in:
parent
f9602b1e85
commit
71e4414b06
@ -42,6 +42,17 @@ export default defineComponent({
|
||||
property: { op: '=', value: null },
|
||||
});
|
||||
|
||||
const operatorSelect = [
|
||||
{ value: '=', text: t$('entity.operator.equal') },
|
||||
{ value: '>', text: t$('entity.operator.greaterThan') },
|
||||
{ value: '<', text: t$('entity.operator.lessThan') },
|
||||
{ value: '>=', text: t$('entity.operator.greaterOrEqual') },
|
||||
{ value: '<=', text: t$('entity.operator.lessOrEqual') },
|
||||
{ value: '!=', text: t$('entity.operator.notEqual') },
|
||||
{ value: 'like', text: t$('entity.operator.like') },
|
||||
{ value: 'not like', text: t$('entity.operator.notLike') },
|
||||
];
|
||||
|
||||
const handleFilter = () => {
|
||||
showFilter.value = !showFilter.value;
|
||||
page.value = 1; // 重置页码
|
||||
@ -60,9 +71,9 @@ export default defineComponent({
|
||||
isFetching.value = true;
|
||||
try {
|
||||
const processedParams = showFilter.value
|
||||
? Object.entries(filterParams.value).reduce((acc, [key, { op, value }]) => {
|
||||
if (value !== null && value !== '') {
|
||||
acc[key] = { op, value };
|
||||
? Object.entries(filterParams.value).reduce((acc, [key, filterParam]) => {
|
||||
if (filterParam.value !== null && filterParam.value !== '') {
|
||||
acc[key] = encodeURIComponent(JSON.stringify({ op: filterParam.op, value: filterParam.value }));
|
||||
}
|
||||
return acc;
|
||||
}, {})
|
||||
@ -138,6 +149,7 @@ export default defineComponent({
|
||||
handlePageSizeChange,
|
||||
prepareDelete,
|
||||
deleteStock,
|
||||
operatorSelect,
|
||||
changeOrder,
|
||||
};
|
||||
},
|
||||
|
||||
@ -28,39 +28,24 @@
|
||||
<div class="form-section">
|
||||
<div class="form-group">
|
||||
<label class="form-control-label" for="filter-number">{{ $t('jewpmsApp.stock.number') }}</label>
|
||||
<div class="d-flex">
|
||||
<select class="form-control w-auto mr-2" v-model="filterParams.number.op">
|
||||
<option value="=">=</option>
|
||||
<option value="like">like</option>
|
||||
<option value=">">></option>
|
||||
<option value="<"><</option>
|
||||
</select>
|
||||
<input type="text" class="form-control" id="filter-number" v-model="filterParams.number.value" />
|
||||
</div>
|
||||
<b-input-group class="form-control-group">
|
||||
<b-form-select id="filter-op" v-model="filterParams.number.op" :options="operatorSelect"></b-form-select>
|
||||
<b-form-input id="filter-number" v-model="filterParams.number.value"></b-form-input>
|
||||
</b-input-group>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-control-label" for="filter-name">{{ $t('jewpmsApp.stock.name') }}</label>
|
||||
<div class="d-flex">
|
||||
<select class="form-control w-auto mr-2" v-model="filterParams.name.op">
|
||||
<option value="=">=</option>
|
||||
<option value="like">like</option>
|
||||
<option value=">">></option>
|
||||
<option value="<"><</option>
|
||||
</select>
|
||||
<input type="text" class="form-control" id="filter-name" v-model="filterParams.name.value" />
|
||||
</div>
|
||||
<b-input-group class="form-control-group">
|
||||
<b-form-select id="filter-op" v-model="filterParams.name.op" :options="operatorSelect"></b-form-select>
|
||||
<b-form-input id="filter-number" v-model="filterParams.name.value"></b-form-input>
|
||||
</b-input-group>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-control-label" for="filter-property">{{ $t('jewpmsApp.stock.property') }}</label>
|
||||
<div class="d-flex">
|
||||
<select class="form-control w-auto mr-2" v-model="filterParams.property.op">
|
||||
<option value="=">=</option>
|
||||
<option value="like">like</option>
|
||||
<option value=">">></option>
|
||||
<option value="<"><</option>
|
||||
</select>
|
||||
<input type="text" class="form-control" id="filter-property" v-model="filterParams.property.value" />
|
||||
</div>
|
||||
<b-input-group class="form-control-group">
|
||||
<b-form-select id="filter-op" v-model="filterParams.property.op" :options="operatorSelect"></b-form-select>
|
||||
<b-form-input id="filter-number" v-model="filterParams.property.value"></b-form-input>
|
||||
</b-input-group>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -10,6 +10,7 @@ import {
|
||||
BFormDatepicker,
|
||||
BFormGroup,
|
||||
BFormInput,
|
||||
BFormSelect,
|
||||
BInputGroup,
|
||||
BInputGroupPrepend,
|
||||
BLink,
|
||||
@ -57,4 +58,5 @@ export function initBootstrapVue(vue) {
|
||||
vue.component('b-form-datepicker', BFormDatepicker);
|
||||
vue.component('b-input-group', BInputGroup);
|
||||
vue.component('b-input-group-prepend', BInputGroupPrepend);
|
||||
vue.component('b-form-select', BFormSelect);
|
||||
}
|
||||
|
||||
@ -51,6 +51,11 @@
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.form-control-label {
|
||||
font-weight: bold;
|
||||
width: 120px;
|
||||
@ -59,9 +64,19 @@
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
.form-control-group {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
display: flex;
|
||||
gap: 5px;
|
||||
}
|
||||
.form-control-group .custom-select {
|
||||
flex: 0 0 auto;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.form-control-group .form-control {
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
|
||||
@media (max-width: 350px) {
|
||||
|
||||
@ -173,6 +173,16 @@
|
||||
"timeout": "相机初始化超时"
|
||||
}
|
||||
},
|
||||
"operator": {
|
||||
"equal": "等于",
|
||||
"greaterThan": "大于",
|
||||
"lessThan": "小于",
|
||||
"greaterOrEqual": "大等于",
|
||||
"lessOrEqual": "小等于",
|
||||
"notEqual": "不等于",
|
||||
"like": "包括",
|
||||
"notLike": "不包括"
|
||||
},
|
||||
"detail": {
|
||||
"field": "字段",
|
||||
"value": "值"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user