|
|
@@ -215,7 +215,7 @@
|
|
|
<div class="func-btn" v-for="fn in functionButtons" :key="fn.key" @click="editPrice(fn)">
|
|
|
<span class="func-icon">{{ fn.icon }}</span>
|
|
|
<span class="func-name">{{ fn.name }}</span>
|
|
|
- <span class="func-price">{{ fn.price != null ? (fn.price / 100).toFixed(2) + '元/分' : '--' }}</span>
|
|
|
+ <span class="func-price">{{ fn.price != null ? (fn.price / 100).toFixed(2) + '元/分钟' : '--' }}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
@@ -253,29 +253,29 @@
|
|
|
<div class="config-editor" v-if="state.showConfigEditor">
|
|
|
<div class="config-title">设备配置编辑</div>
|
|
|
<el-form :model="state.configForm" label-width="140px" size="small" inline>
|
|
|
- <el-form-item label="清水单价(分/分)">
|
|
|
- <el-input-number v-model="state.configForm.priceWater" :min="0" size="small" controls-position="right"/>
|
|
|
+ <el-form-item label="清水单价(元/分钟)">
|
|
|
+ <el-input-number v-model="state.configForm.priceWater" :min="0" :precision="2" :step="0.1" size="small" controls-position="right"/>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="泡沫单价(分/分)">
|
|
|
- <el-input-number v-model="state.configForm.priceFoam" :min="0" size="small" controls-position="right"/>
|
|
|
+ <el-form-item label="泡沫单价(元/分钟)">
|
|
|
+ <el-input-number v-model="state.configForm.priceFoam" :min="0" :precision="2" :step="0.1" size="small" controls-position="right"/>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="吸尘单价(分/分)">
|
|
|
- <el-input-number v-model="state.configForm.priceCleaner" :min="0" size="small" controls-position="right"/>
|
|
|
+ <el-form-item label="吸尘单价(元/分钟)">
|
|
|
+ <el-input-number v-model="state.configForm.priceCleaner" :min="0" :precision="2" :step="0.1" size="small" controls-position="right"/>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="洗手单价(分/分)">
|
|
|
- <el-input-number v-model="state.configForm.priceTap" :min="0" size="small" controls-position="right"/>
|
|
|
+ <el-form-item label="洗手单价(元/分钟)">
|
|
|
+ <el-input-number v-model="state.configForm.priceTap" :min="0" :precision="2" :step="0.1" size="small" controls-position="right"/>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="扩展单价(分/分)">
|
|
|
- <el-input-number v-model="state.configForm.priceUserExt" :min="0" size="small" controls-position="right"/>
|
|
|
+ <el-form-item label="扩展单价(元/分钟)">
|
|
|
+ <el-input-number v-model="state.configForm.priceUserExt" :min="0" :precision="2" :step="0.1" size="small" controls-position="right"/>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="镀膜单价(分/分)">
|
|
|
- <el-input-number v-model="state.configForm.priceCoat" :min="0" size="small" controls-position="right"/>
|
|
|
+ <el-form-item label="镀膜单价(元/分钟)">
|
|
|
+ <el-input-number v-model="state.configForm.priceCoat" :min="0" :precision="2" :step="0.1" size="small" controls-position="right"/>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="吹气单价(分/分)">
|
|
|
- <el-input-number v-model="state.configForm.priceBlow" :min="0" size="small" controls-position="right"/>
|
|
|
+ <el-form-item label="吹气单价(元/分钟)">
|
|
|
+ <el-input-number v-model="state.configForm.priceBlow" :min="0" :precision="2" :step="0.1" size="small" controls-position="right"/>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="场地费(分/分)">
|
|
|
- <el-input-number v-model="state.configForm.priceSpace" :min="0" size="small" controls-position="right"/>
|
|
|
+ <el-form-item label="场地费(元/分钟)">
|
|
|
+ <el-input-number v-model="state.configForm.priceSpace" :min="0" :precision="2" :step="0.1" size="small" controls-position="right"/>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="空闲超时(秒)">
|
|
|
<el-input-number v-model="state.configForm.idleTimeout" :min="0" size="small" controls-position="right"/>
|
|
|
@@ -394,6 +394,8 @@ const functionButtons = [
|
|
|
{key: 'priceSpace', name: '场地费', icon: '🅿️', price: null as number | null},
|
|
|
];
|
|
|
|
|
|
+const priceKeys = functionButtons.map(f => f.key);
|
|
|
+
|
|
|
const statusClass = computed(() => {
|
|
|
const map: Record<string, string> = {busy: 'busy', idle: 'idle', init: 'init', fault: 'fault', maintenance: 'maintenance', sleep: 'sleep'};
|
|
|
return map[state.deviceState] || '';
|
|
|
@@ -448,10 +450,10 @@ const loadDeviceState = async () => {
|
|
|
// 自动加载设备配置,填充功能按钮价格
|
|
|
try {
|
|
|
const config: any = await api('readConfig');
|
|
|
- state.configForm = {...config};
|
|
|
for (const fn of functionButtons) {
|
|
|
fn.price = config?.[fn.key] ?? null;
|
|
|
}
|
|
|
+ state.configForm = fenToYuanConfig(config);
|
|
|
} catch (e) {
|
|
|
// 配置加载失败不影响面板使用,功能按钮显示 "--"
|
|
|
for (const fn of functionButtons) {
|
|
|
@@ -469,11 +471,11 @@ const handleReadConfig = async () => {
|
|
|
state.loading = true;
|
|
|
try {
|
|
|
const res: any = await api('readConfig');
|
|
|
- state.configForm = {...res};
|
|
|
- // 同步价格到功能按钮
|
|
|
+ // 同步价格到功能按钮(保持fen)
|
|
|
for (const fn of functionButtons) {
|
|
|
fn.price = res?.[fn.key] ?? null;
|
|
|
}
|
|
|
+ state.configForm = fenToYuanConfig(res);
|
|
|
state.showConfigEditor = true;
|
|
|
Msg.message('配置读取成功', 'success');
|
|
|
} catch (e) {
|
|
|
@@ -486,10 +488,10 @@ const handleReadConfig = async () => {
|
|
|
const handleWriteConfig = async () => {
|
|
|
state.loading = true;
|
|
|
try {
|
|
|
- await api('writeConfig', {config: state.configForm});
|
|
|
+ await api('writeConfig', {config: yuanToFenConfig(state.configForm)});
|
|
|
// 同步更新按钮显示的价格
|
|
|
for (const fn of functionButtons) {
|
|
|
- fn.price = state.configForm[fn.key] ?? null;
|
|
|
+ fn.price = Math.round(state.configForm[fn.key] * 100);
|
|
|
}
|
|
|
Msg.message('配置写入成功', 'success');
|
|
|
} catch (e) {
|
|
|
@@ -598,5 +600,21 @@ const handleForceCloseOrder = () => {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
+const fenToYuanConfig = (config: any) => {
|
|
|
+ const c = { ...config };
|
|
|
+ priceKeys.forEach(k => {
|
|
|
+ if (c[k] != null) c[k] = parseFloat((c[k] / 100).toFixed(2));
|
|
|
+ });
|
|
|
+ return c;
|
|
|
+};
|
|
|
+
|
|
|
+const yuanToFenConfig = (config: any) => {
|
|
|
+ const c = { ...config };
|
|
|
+ priceKeys.forEach(k => {
|
|
|
+ if (c[k] != null) c[k] = Math.round(c[k] * 100);
|
|
|
+ });
|
|
|
+ return c;
|
|
|
+};
|
|
|
+
|
|
|
defineExpose({open});
|
|
|
</script>
|