feat(库存管理): 添加状态字段并支持状态字典查询
在库存管理模块中添加状态字段,并支持通过字典查询状态选项。修改了前端组件、后端服务以及国际化文件,确保状态字段的显示、编辑和筛选功能正常
This commit is contained in:
parent
0193ccd13e
commit
96e6095199
@ -39,6 +39,7 @@ public class StockService {
|
||||
existingStock.setName(stock.getName());
|
||||
existingStock.setProperty(stock.getProperty());
|
||||
existingStock.setRemark(stock.getRemark());
|
||||
existingStock.setStatus(stock.getStatus());
|
||||
existingStock.setSortNo(stock.getSortNo());
|
||||
return stockRepository.save(existingStock);
|
||||
});
|
||||
|
||||
@ -26,8 +26,8 @@ export default defineComponent({
|
||||
name: '',
|
||||
property: '',
|
||||
remark: '',
|
||||
sortNo: 0,
|
||||
status: '',
|
||||
sortNo: 0,
|
||||
version: 0,
|
||||
});
|
||||
|
||||
|
||||
@ -54,6 +54,7 @@ export default defineComponent({
|
||||
name: '',
|
||||
property: '',
|
||||
remark: '',
|
||||
status: '1',
|
||||
sortNo: 0,
|
||||
version: 0,
|
||||
});
|
||||
|
||||
@ -59,8 +59,7 @@
|
||||
<b-form-select id="filter-op" v-model="filterParams.status.op" :options="operatorSelect"></b-form-select>
|
||||
<b-form-select id="filter-status" v-model="filterParams.status.value">
|
||||
<option :value="null">{{ $t('entity.action.select') }}</option>
|
||||
<option :value="1">生效</option>
|
||||
<option :value="0">失效</option>
|
||||
<option v-for="dict in statusDicts" :key="dict.number" :value="dict.number">{{ dict.name }}</option>
|
||||
</b-form-select>
|
||||
</b-input-group>
|
||||
</div>
|
||||
|
||||
@ -15,12 +15,14 @@ export default defineComponent({
|
||||
|
||||
const loading = ref(false);
|
||||
const isSaving = ref(false);
|
||||
const statusDicts = ref([]);
|
||||
const stock = ref({
|
||||
id: null,
|
||||
number: '',
|
||||
name: '',
|
||||
property: '',
|
||||
remark: '',
|
||||
status: '',
|
||||
sortNo: 0,
|
||||
version: 0,
|
||||
});
|
||||
@ -28,11 +30,35 @@ export default defineComponent({
|
||||
const loadData = async () => {
|
||||
loading.value = true;
|
||||
try {
|
||||
const stockId = route.params?.id;
|
||||
if (stockId) {
|
||||
const { data } = await axios.get(`api/stocks/${stockId}`);
|
||||
stock.value = data;
|
||||
const [stockRes, statusDictsRes] = await Promise.all([
|
||||
route.params?.id ? axios.get(`api/stocks/${route.params.id}`) : Promise.resolve({ data: stock.value }),
|
||||
axios.get('api/dicts', {
|
||||
params: {
|
||||
number: { name: '' },
|
||||
name: { name: '' },
|
||||
property: { name: '' },
|
||||
parentNumber: { op: '=', value: 'StatusType' },
|
||||
status: { op: '=', value: '1' },
|
||||
},
|
||||
}),
|
||||
]);
|
||||
if (route.params?.id) {
|
||||
stock.value = stockRes.data;
|
||||
} else {
|
||||
// 设置新建stock时的默认状态值
|
||||
const defaultStatus = statusDictsRes.data.find(item => {
|
||||
try {
|
||||
const propertyObj = JSON.parse(item.property || '{}');
|
||||
return propertyObj.default === 1;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
if (defaultStatus) {
|
||||
stock.value.status = defaultStatus.number;
|
||||
}
|
||||
}
|
||||
statusDicts.value = statusDictsRes.data;
|
||||
} catch (e) {
|
||||
alertService.showHttpError(e);
|
||||
} finally {
|
||||
@ -47,6 +73,7 @@ export default defineComponent({
|
||||
const save = async () => {
|
||||
isSaving.value = true;
|
||||
try {
|
||||
console.log(stock.value);
|
||||
if (stock.value.id) {
|
||||
await axios.put(`api/stocks/${stock.value.id}`, stock.value);
|
||||
alertService.showInfo(t$('jewpmsApp.stock.updated', { param: stock.value.name }));
|
||||
@ -70,6 +97,7 @@ export default defineComponent({
|
||||
loading,
|
||||
isSaving,
|
||||
stock,
|
||||
statusDicts,
|
||||
previousState,
|
||||
save,
|
||||
};
|
||||
|
||||
@ -50,6 +50,16 @@
|
||||
<textarea class="form-control" id="stock-remark" data-cy="remark" name="remark" v-model="stock.remark"></textarea>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="form-control-label" for="stock-status">{{ $t('jewpmsApp.stock.status') }}</label>
|
||||
<select class="form-control" id="stock-status" data-cy="status" name="status" v-model="stock.status">
|
||||
<option value="">{{ $t('entity.action.select') }}</option>
|
||||
<option v-for="item in statusDicts" :key="item.number" :value="item.number">
|
||||
{{ item.name }}
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="form-control-label" for="stock-sort-no">{{ $t('jewpmsApp.stock.sortNo') }}</label>
|
||||
<input type="number" class="form-control" id="stock-sort-no" data-cy="sortNo" name="sortNo" v-model="stock.sortNo" />
|
||||
|
||||
@ -15,12 +15,14 @@ export default defineComponent({
|
||||
|
||||
const isFetching = ref(false);
|
||||
const stocks = ref([]);
|
||||
const statusDicts = ref([]);
|
||||
const stock = ref({
|
||||
id: null,
|
||||
number: '',
|
||||
name: '',
|
||||
property: '',
|
||||
remark: '',
|
||||
status: '1',
|
||||
sortNo: 0,
|
||||
version: 0,
|
||||
});
|
||||
@ -40,6 +42,7 @@ export default defineComponent({
|
||||
number: { op: '=', value: null },
|
||||
name: { op: '=', value: null },
|
||||
property: { op: '=', value: null },
|
||||
status: { op: '=', value: null },
|
||||
});
|
||||
|
||||
const operatorSelect = [
|
||||
@ -70,26 +73,38 @@ export default defineComponent({
|
||||
const handleSyncList = async () => {
|
||||
isFetching.value = true;
|
||||
try {
|
||||
const params = Object.fromEntries([
|
||||
...Object.keys(stock.value).map(key => [`${key}[name]`, '']),
|
||||
...(showFilter.value
|
||||
? Object.entries(filterParams.value)
|
||||
.filter(([, filterParam]) => filterParam.value !== null && filterParam.value !== '')
|
||||
.flatMap(([key, filterParam]) => [
|
||||
[`${key}[op]`, filterParam.op],
|
||||
[`${key}[value]`, filterParam.value],
|
||||
])
|
||||
: []),
|
||||
const [stocksRes, statusDictsRes] = await Promise.all([
|
||||
axios.get(
|
||||
`api/stocks?${buildPaginationQuery({
|
||||
page: page.value - 1,
|
||||
size: itemsPerPage.value,
|
||||
sort: sort(),
|
||||
})}`,
|
||||
{
|
||||
params: Object.fromEntries([
|
||||
...Object.keys(stock.value).map(key => [`${key}[name]`, '']),
|
||||
...(showFilter.value
|
||||
? Object.entries(filterParams.value)
|
||||
.filter(([, filterParam]) => filterParam.value !== null && filterParam.value !== '')
|
||||
.flatMap(([key, filterParam]) => [
|
||||
[`${key}[op]`, filterParam.op],
|
||||
[`${key}[value]`, filterParam.value],
|
||||
])
|
||||
: []),
|
||||
]),
|
||||
},
|
||||
),
|
||||
axios.get('api/dicts', {
|
||||
params: {
|
||||
number: { name: '' },
|
||||
name: { name: '' },
|
||||
parentNumber: { op: '=', value: 'StatusType' },
|
||||
status: { op: '=', value: '1' },
|
||||
},
|
||||
}),
|
||||
]);
|
||||
const stocksRes = await axios.get(
|
||||
`api/stocks?${buildPaginationQuery({
|
||||
page: page.value - 1,
|
||||
size: itemsPerPage.value,
|
||||
sort: sort(),
|
||||
})}`,
|
||||
{ params: params },
|
||||
);
|
||||
stocks.value = stocksRes.data;
|
||||
statusDicts.value = statusDictsRes.data;
|
||||
totalItems.value = stocksRes.headers['x-total-count'] || stocksRes.data.length;
|
||||
} catch (e) {
|
||||
alertService.showHttpError(e);
|
||||
@ -153,6 +168,7 @@ export default defineComponent({
|
||||
deleteStock,
|
||||
operatorSelect,
|
||||
changeOrder,
|
||||
statusDicts,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@ -47,6 +47,16 @@
|
||||
<b-form-input id="filter-number" v-model="filterParams.property.value"></b-form-input>
|
||||
</b-input-group>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-control-label">{{ $t('jewpmsApp.stock.status') }}</label>
|
||||
<b-input-group class="form-control-group">
|
||||
<b-form-select id="filter-op" v-model="filterParams.status.op" :options="operatorSelect"></b-form-select>
|
||||
<b-form-select id="filter-status" v-model="filterParams.status.value">
|
||||
<option :value="null">{{ $t('entity.action.select') }}</option>
|
||||
<option v-for="dict in statusDicts" :key="dict.number" :value="dict.number">{{ dict.name }}</option>
|
||||
</b-form-select>
|
||||
</b-input-group>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -74,6 +84,10 @@
|
||||
<span v-text="$t('jewpmsApp.stock.remark')"></span>
|
||||
<jhi-sort-indicator :current-order="propOrder" :reverse="reverse" :field-name="'remark'"></jhi-sort-indicator>
|
||||
</th>
|
||||
<th scope="row" @click="changeOrder('status')">
|
||||
<span v-text="$t('jewpmsApp.stock.status')"></span>
|
||||
<jhi-sort-indicator :current-order="propOrder" :reverse="reverse" :field-name="'status'"></jhi-sort-indicator>
|
||||
</th>
|
||||
<th scope="row" @click="changeOrder('sortNo')">
|
||||
<span v-text="$t('jewpmsApp.stock.sortNo')"></span>
|
||||
<jhi-sort-indicator :current-order="propOrder" :reverse="reverse" :field-name="'sortNo'"></jhi-sort-indicator>
|
||||
@ -87,6 +101,7 @@
|
||||
<td>{{ stock.name }}</td>
|
||||
<td>{{ stock.property }}</td>
|
||||
<td>{{ stock.remark }}</td>
|
||||
<td>{{ statusDicts.find(dict => dict.number === stock.status)?.name || '' }}</td>
|
||||
<td>{{ stock.sortNo }}</td>
|
||||
<td class="text-right">
|
||||
<div class="btn-group">
|
||||
|
||||
@ -22,6 +22,7 @@
|
||||
"name": "仓位名称",
|
||||
"property": "属性",
|
||||
"remark": "备注",
|
||||
"status": "状态",
|
||||
"sortNo": "排序号",
|
||||
"company": "所属公司",
|
||||
"createdBy": "创建人",
|
||||
|
||||
Loading…
Reference in New Issue
Block a user