<script setup lang="ts">
|
import { reactive, ref } from 'vue';
|
import { onLoad } from '@dcloudio/uni-app';
|
import { createMeasureUnit, getMeasureUnit, updateMeasureUnit, type MeasureUnit } from '../../../api/basic-data';
|
import { useAuth } from '../../../stores/auth';
|
const { state } = useAuth(); const id = ref<number>(); const saving = ref(false); const form = reactive<MeasureUnit>({ code: '', name: '', status: 0 });
|
async function save() { if (!form.code.trim() || !form.name.trim()) return uni.showToast({ title: '请填写单位编码和名称', icon: 'none' }); if (!state.accessToken || saving.value) return; saving.value = true; try { const data = { ...form, code: form.code.trim(), name: form.name.trim() }; if (id.value) await updateMeasureUnit(state.accessToken, { ...data, id: id.value }); else await createMeasureUnit(state.accessToken, data); uni.showToast({ title: '保存成功', icon: 'success' }); setTimeout(() => uni.navigateBack(), 500); } catch (error) { uni.showToast({ title: error instanceof Error ? error.message : '保存失败', icon: 'none' }); } finally { saving.value = false; } }
|
onLoad(async query => { id.value = query.id ? Number(query.id) : undefined; if (!id.value || !state.accessToken) return; try { Object.assign(form, await getMeasureUnit(state.accessToken, id.value)); } catch (error) { uni.showToast({ title: error instanceof Error ? error.message : '数据加载失败', icon: 'none' }); } });
|
</script>
|
<template><view class="page"><view class="form-card"><view class="field"><text>单位编码 <text class="required">*</text></text><input v-model="form.code" placeholder="请输入单位编码" /></view><view class="field"><text>单位名称 <text class="required">*</text></text><input v-model="form.name" placeholder="请输入单位名称" /></view><view class="field"><text>状态</text><radio-group @change="form.status = Number($event.detail.value)"><label><radio :checked="form.status === 0" value="0" />启用</label><label><radio :checked="form.status === 1" value="1" />停用</label></radio-group></view><view class="field column"><text>备注</text><textarea v-model="form.remark" placeholder="请输入备注" ></textarea></view></view><button class="save" :loading="saving" :disabled="saving" @click="save">保存</button></view></template>
|
<style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-card{background:#fff;border-radius:16rpx;overflow:hidden}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5;gap:20rpx}.field>text{width:180rpx;color:#33455d;font-size:27rpx}.field input{flex:1;color:#1e3049;font-size:27rpx}.field radio-group{flex:1;display:flex;gap:30rpx;font-size:26rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;background:var(--color-primary, #1769d8);border-radius:12rpx;font-size:30rpx}.save::after{border:0}</style>
|