|
|
@@ -0,0 +1,555 @@
|
|
|
+<template>
|
|
|
+ <div class="app-container">
|
|
|
+ <!-- 页面头部 -->
|
|
|
+ <div class="detail-header">
|
|
|
+ <el-icon class="back-icon" @click="goBack"><ArrowLeft /></el-icon>
|
|
|
+ <span class="header-title">编辑合约供货</span>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 表单卡片 -->
|
|
|
+ <el-card shadow="never" class="form-card">
|
|
|
+ <el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="协议编号" prop="contractSupplyNo">
|
|
|
+ <span>{{ form.contractSupplyNo }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="所属公司" prop="companyId">
|
|
|
+ <el-select v-model="form.companyId" placeholder="请选择" style="width: 100%;">
|
|
|
+ <el-option
|
|
|
+ v-for="item in companyList"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.companyName"
|
|
|
+ :value="item.id"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="供应商" prop="supplierId">
|
|
|
+ <el-select v-model="form.supplierId" placeholder="请选择" style="width: 100%;">
|
|
|
+ <el-option
|
|
|
+ v-for="item in supplierList"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.enterpriseName"
|
|
|
+ :value="item.id"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="开始时间" prop="startTime">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="form.startTime"
|
|
|
+ type="date"
|
|
|
+ placeholder="请选择"
|
|
|
+ value-format="YYYY-MM-DD"
|
|
|
+ style="width: 100%;"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="结束时间" prop="endTime">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="form.endTime"
|
|
|
+ type="date"
|
|
|
+ placeholder="请选择"
|
|
|
+ value-format="YYYY-MM-DD"
|
|
|
+ style="width: 100%;"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="附件" prop="attachment">
|
|
|
+ <FileUpload
|
|
|
+ v-model="form.attachment"
|
|
|
+ :limit="10"
|
|
|
+ :file-size="50"
|
|
|
+ :file-type="['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'txt', 'pdf']"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="备注" prop="remark">
|
|
|
+ <el-input
|
|
|
+ v-model="form.remark"
|
|
|
+ type="textarea"
|
|
|
+ :rows="4"
|
|
|
+ placeholder="请输入内容"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <!-- 商品列表 -->
|
|
|
+ <div class="section-title">
|
|
|
+ <el-button type="primary" @click="handleAddProduct">添加商品信息</el-button>
|
|
|
+ <el-button type="success" @click="handleImport">导入</el-button>
|
|
|
+ <el-button type="warning" @click="handleExport">导出</el-button>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <el-table :data="productList" border style="width: 100%; margin-top: 20px;">
|
|
|
+ <el-table-column prop="productCode" label="产品编号" align="center" width="120" />
|
|
|
+ <el-table-column label="产品图片" align="center" width="100">
|
|
|
+ <template #default="scope">
|
|
|
+ <el-image
|
|
|
+ v-if="scope.row.productImage"
|
|
|
+ :src="scope.row.productImage"
|
|
|
+ style="width: 60px; height: 60px;"
|
|
|
+ fit="cover"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="productName" label="产品名称" align="center" show-overflow-tooltip />
|
|
|
+ <el-table-column prop="productType" label="产品类型" align="center" width="120" />
|
|
|
+ <el-table-column prop="brand" label="品牌" align="center" width="100" />
|
|
|
+ <el-table-column prop="unit" label="单位" align="center" width="80" />
|
|
|
+ <el-table-column prop="marketPrice" label="市场价" align="center" width="100" />
|
|
|
+ <el-table-column prop="platformPrice" label="平台价" align="center" width="100" />
|
|
|
+ <el-table-column label="供应价(元)" align="center" width="120">
|
|
|
+ <template #default="scope">
|
|
|
+ <el-input v-model="scope.row.supplyPrice" placeholder="请输入" />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="供应时效" align="center" width="120">
|
|
|
+ <template #default="scope">
|
|
|
+ <el-input v-model="scope.row.supplyCycle" placeholder="请输入" />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="上架状态" align="center" width="100">
|
|
|
+ <template #default="scope">
|
|
|
+ <span>{{ scope.row.upPrice }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="操作" align="center" width="100" fixed="right">
|
|
|
+ <template #default="scope">
|
|
|
+ <el-button link type="primary" @click="handleDeleteProduct(scope.$index)">删除</el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+
|
|
|
+ <div style="text-align: center; margin-top: 20px;">
|
|
|
+ <el-checkbox v-model="form.isSubmit">提交</el-checkbox>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <el-row style="margin-top: 20px;">
|
|
|
+ <el-col :span="24" style="text-align: center;">
|
|
|
+ <el-button type="primary" @click="handleSubmit">提交</el-button>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form>
|
|
|
+ </el-card>
|
|
|
+
|
|
|
+ <!-- 添加商品对话框 -->
|
|
|
+ <el-dialog title="添加商品报价" v-model="productDialog.visible" width="90%" append-to-body>
|
|
|
+ <div class="mb-4">
|
|
|
+ <el-form :inline="true" :model="productQuery">
|
|
|
+ <el-form-item label="产品编号">
|
|
|
+ <el-input v-model="productQuery.productNo" placeholder="请输入产品编号" clearable style="width: 200px;" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="产品名称">
|
|
|
+ <el-input v-model="productQuery.itemName" placeholder="请输入产品名称" clearable style="width: 200px;" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="品牌名称">
|
|
|
+ <el-input v-model="productQuery.brandName" placeholder="请输入品牌名称" clearable style="width: 200px;" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="上架状态">
|
|
|
+ <el-select v-model="productQuery.productStatus" placeholder="请选择" clearable style="width: 150px;">
|
|
|
+ <el-option label="上架" :value="1" />
|
|
|
+ <el-option label="下架" :value="0" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item>
|
|
|
+ <el-button type="primary" icon="Search" @click="handleProductQuery">搜索</el-button>
|
|
|
+ <el-button icon="Refresh" @click="resetProductQuery">重置</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <el-table
|
|
|
+ :data="productListData"
|
|
|
+ border
|
|
|
+ style="width: 100%;"
|
|
|
+ @selection-change="handleProductSelectionChange"
|
|
|
+ >
|
|
|
+ <el-table-column type="selection" width="55" align="center" />
|
|
|
+ <el-table-column prop="productNo" label="产品编号" align="center" width="120" />
|
|
|
+ <el-table-column label="产品图片" align="center" width="100">
|
|
|
+ <template #default="scope">
|
|
|
+ <el-image
|
|
|
+ v-if="scope.row.productImage"
|
|
|
+ :src="scope.row.productImage"
|
|
|
+ style="width: 60px; height: 60px;"
|
|
|
+ fit="cover"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="itemName" label="产品名称" align="center" show-overflow-tooltip />
|
|
|
+ <el-table-column prop="brandName" label="品牌" align="center" width="120" />
|
|
|
+ <el-table-column prop="unitName" label="单位" align="center" width="80" />
|
|
|
+ <el-table-column prop="marketPrice" label="市场价" align="center" width="100" />
|
|
|
+ <el-table-column prop="memberPrice" label="平台价" align="center" width="100" />
|
|
|
+ <el-table-column prop="minOrderQuantity" label="起订量" align="center" width="100" />
|
|
|
+ <el-table-column label="上架状态" align="center" width="100">
|
|
|
+ <template #default="scope">
|
|
|
+ <span>{{ scope.row.productStatus === 1 ? '上架' : '下架' }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="操作" align="center" width="100">
|
|
|
+ <template #default="scope">
|
|
|
+ <el-button link type="primary" @click="handleAddToList(scope.row)">加入清单</el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+
|
|
|
+ <pagination
|
|
|
+ v-show="productTotal > 0"
|
|
|
+ :total="productTotal"
|
|
|
+ v-model:page="productQuery.pageNum"
|
|
|
+ v-model:limit="productQuery.pageSize"
|
|
|
+ @pagination="getProductList"
|
|
|
+ />
|
|
|
+
|
|
|
+ <template #footer>
|
|
|
+ <div class="dialog-footer">
|
|
|
+ <el-button type="primary" @click="handleBatchAdd">批量加入清单</el-button>
|
|
|
+ <el-button @click="productDialog.visible = false">关 闭</el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup lang="ts">
|
|
|
+import { ref, onMounted, reactive } from 'vue';
|
|
|
+import { useRoute, useRouter } from 'vue-router';
|
|
|
+import { ArrowLeft } from '@element-plus/icons-vue';
|
|
|
+import { getContractsupply, updateContractsupply } from '@/api/supplier/contractsupply';
|
|
|
+import { getCompanyList, listInfo } from '@/api/customer/info';
|
|
|
+import { listBase } from '@/api/product/base';
|
|
|
+import { ElMessage } from 'element-plus';
|
|
|
+import FileUpload from '@/components/FileUpload/index.vue';
|
|
|
+
|
|
|
+const route = useRoute();
|
|
|
+const router = useRouter();
|
|
|
+
|
|
|
+const formRef = ref();
|
|
|
+const productList = ref<any[]>([]);
|
|
|
+const companyList = ref<any[]>([]);
|
|
|
+const supplierList = ref<any[]>([]);
|
|
|
+
|
|
|
+// 商品对话框相关
|
|
|
+const productDialog = reactive({
|
|
|
+ visible: false
|
|
|
+});
|
|
|
+
|
|
|
+const productListData = ref<any[]>([]);
|
|
|
+const productTotal = ref(0);
|
|
|
+const selectedProducts = ref<any[]>([]);
|
|
|
+
|
|
|
+const productQuery = reactive({
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 10,
|
|
|
+ productNo: '',
|
|
|
+ itemName: '',
|
|
|
+ brandName: '',
|
|
|
+ productStatus: undefined as number | undefined
|
|
|
+});
|
|
|
+
|
|
|
+const form = ref({
|
|
|
+ id: '',
|
|
|
+ contractSupplyNo: '',
|
|
|
+ companyId: '',
|
|
|
+ supplierId: '',
|
|
|
+ supplyNo: '',
|
|
|
+ supplierName: '',
|
|
|
+ startTime: '',
|
|
|
+ endTime: '',
|
|
|
+ attachment: '',
|
|
|
+ remark: '',
|
|
|
+ isSubmit: false
|
|
|
+});
|
|
|
+
|
|
|
+const rules = {
|
|
|
+ // 编辑页面所有字段都不是必填
|
|
|
+};
|
|
|
+
|
|
|
+/** 返回上一页 */
|
|
|
+const goBack = () => {
|
|
|
+ router.back();
|
|
|
+};
|
|
|
+
|
|
|
+/** 获取公司列表 */
|
|
|
+const getCompanyData = async () => {
|
|
|
+ try {
|
|
|
+ const res = await getCompanyList();
|
|
|
+ companyList.value = res.data || [];
|
|
|
+ } catch (e) {
|
|
|
+ console.error('获取公司列表失败:', e);
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+/** 获取供应商列表 */
|
|
|
+const getSupplierData = async () => {
|
|
|
+ try {
|
|
|
+ const res = await listInfo();
|
|
|
+ supplierList.value = res.rows || [];
|
|
|
+ } catch (e) {
|
|
|
+ console.error('获取供应商列表失败:', e);
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+/** 获取详情数据 */
|
|
|
+const getDetail = async () => {
|
|
|
+ const id = route.params.id as string;
|
|
|
+ if (id) {
|
|
|
+ try {
|
|
|
+ const res = await getContractsupply(id);
|
|
|
+
|
|
|
+ // 回显基本信息
|
|
|
+ form.value = {
|
|
|
+ id: res.data.id,
|
|
|
+ contractSupplyNo: res.data.contractSupplyNo,
|
|
|
+ companyId: res.data.companyId,
|
|
|
+ supplierId: res.data.supplierId,
|
|
|
+ supplyNo: res.data.supplyNo || '',
|
|
|
+ supplierName: res.data.supplierName,
|
|
|
+ startTime: res.data.startTime,
|
|
|
+ endTime: res.data.endTime,
|
|
|
+ attachment: res.data.attachment,
|
|
|
+ remark: res.data.remark,
|
|
|
+ isSubmit: res.data.isSubmit || false
|
|
|
+ };
|
|
|
+
|
|
|
+ // 回显商品列表(关键!需要字段映射)
|
|
|
+ productList.value = (res.data.contractProduct || []).map((item: any) => ({
|
|
|
+ productId: item.productId,
|
|
|
+ productCode: item.productNo,
|
|
|
+ productImage: item.productImage,
|
|
|
+ productName: item.itemName,
|
|
|
+ productType: item.categoryName,
|
|
|
+ brand: item.brandName,
|
|
|
+ unit: item.unitName,
|
|
|
+ basePrice: item.purchasingPrice || 0,
|
|
|
+ marketPrice: item.marketPrice || 0,
|
|
|
+ platformPrice: item.memberPrice || 0,
|
|
|
+ supplyPrice: item.offerPrice || '',
|
|
|
+ supplyCycle: item.supplyCycle || '',
|
|
|
+ upPrice: item.productStatus === 1 ? '上架' : '下架'
|
|
|
+ }));
|
|
|
+ } catch (e) {
|
|
|
+ console.error('获取详情失败:', e);
|
|
|
+ ElMessage.error('获取详情失败');
|
|
|
+ }
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+/** 添加商品 */
|
|
|
+const handleAddProduct = () => {
|
|
|
+ productDialog.visible = true;
|
|
|
+};
|
|
|
+
|
|
|
+/** 获取商品列表 */
|
|
|
+const getProductList = async () => {
|
|
|
+ try {
|
|
|
+ const res = await listBase(productQuery);
|
|
|
+ productListData.value = res.rows || [];
|
|
|
+ productTotal.value = res.total || 0;
|
|
|
+ } catch (e) {
|
|
|
+ console.error('获取商品列表失败:', e);
|
|
|
+ ElMessage.error('获取商品列表失败');
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+/** 商品查询 */
|
|
|
+const handleProductQuery = () => {
|
|
|
+ productQuery.pageNum = 1;
|
|
|
+ getProductList();
|
|
|
+};
|
|
|
+
|
|
|
+/** 重置商品查询 */
|
|
|
+const resetProductQuery = () => {
|
|
|
+ productQuery.productNo = '';
|
|
|
+ productQuery.itemName = '';
|
|
|
+ productQuery.brandName = '';
|
|
|
+ productQuery.productStatus = undefined;
|
|
|
+ handleProductQuery();
|
|
|
+};
|
|
|
+
|
|
|
+/** 商品多选 */
|
|
|
+const handleProductSelectionChange = (selection: any[]) => {
|
|
|
+ selectedProducts.value = selection;
|
|
|
+};
|
|
|
+
|
|
|
+/** 加入清单 */
|
|
|
+const handleAddToList = (row: any) => {
|
|
|
+ // 检查是否已存在
|
|
|
+ const exists = productList.value.some(item => item.productId === row.id);
|
|
|
+ if (exists) {
|
|
|
+ ElMessage.warning('该商品已在清单中');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加到本地清单
|
|
|
+ productList.value.push({
|
|
|
+ productId: row.id,
|
|
|
+ productCode: row.productNo,
|
|
|
+ productImage: row.productImage,
|
|
|
+ productName: row.itemName,
|
|
|
+ productType: row.categoryName,
|
|
|
+ brand: row.brandName,
|
|
|
+ unit: row.unitName,
|
|
|
+ basePrice: row.purchasingPrice || 0,
|
|
|
+ marketPrice: row.marketPrice || 0,
|
|
|
+ platformPrice: row.memberPrice || 0,
|
|
|
+ supplyPrice: '',
|
|
|
+ supplyCycle: '',
|
|
|
+ upPrice: row.productStatus === 1 ? '上架' : '下架'
|
|
|
+ });
|
|
|
+
|
|
|
+ ElMessage.success('添加成功');
|
|
|
+};
|
|
|
+
|
|
|
+/** 批量加入清单 */
|
|
|
+const handleBatchAdd = () => {
|
|
|
+ if (selectedProducts.value.length === 0) {
|
|
|
+ ElMessage.warning('请选择要添加的商品');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ let successCount = 0;
|
|
|
+
|
|
|
+ selectedProducts.value.forEach(row => {
|
|
|
+ const exists = productList.value.some(item => item.productId === row.id);
|
|
|
+ if (!exists) {
|
|
|
+ productList.value.push({
|
|
|
+ productId: row.id,
|
|
|
+ productCode: row.productNo,
|
|
|
+ productImage: row.productImage,
|
|
|
+ productName: row.itemName,
|
|
|
+ productType: row.categoryName,
|
|
|
+ brand: row.brandName,
|
|
|
+ unit: row.unitName,
|
|
|
+ basePrice: row.purchasingPrice || 0,
|
|
|
+ marketPrice: row.marketPrice || 0,
|
|
|
+ platformPrice: row.memberPrice || 0,
|
|
|
+ supplyPrice: '',
|
|
|
+ supplyCycle: '',
|
|
|
+ upPrice: row.productStatus === 1 ? '上架' : '下架'
|
|
|
+ });
|
|
|
+
|
|
|
+ successCount++;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ ElMessage.success(`成功添加${successCount}个商品`);
|
|
|
+ productDialog.visible = false;
|
|
|
+};
|
|
|
+
|
|
|
+/** 导入 */
|
|
|
+const handleImport = () => {
|
|
|
+ console.log('导入');
|
|
|
+ // TODO: 实现导入功能
|
|
|
+};
|
|
|
+
|
|
|
+/** 导出 */
|
|
|
+const handleExport = () => {
|
|
|
+ console.log('导出');
|
|
|
+ // TODO: 实现导出功能
|
|
|
+};
|
|
|
+
|
|
|
+/** 删除商品 */
|
|
|
+const handleDeleteProduct = (index: number) => {
|
|
|
+ productList.value.splice(index, 1);
|
|
|
+};
|
|
|
+
|
|
|
+/** 提交表单 */
|
|
|
+const handleSubmit = async () => {
|
|
|
+ formRef.value?.validate(async (valid: boolean) => {
|
|
|
+ if (valid) {
|
|
|
+ try {
|
|
|
+ // 组装提交数据,包含表单数据和商品列表
|
|
|
+ const submitData = {
|
|
|
+ ...form.value,
|
|
|
+ contractProduct: productList.value.map(item => ({
|
|
|
+ productId: item.productId,
|
|
|
+ productNo: item.productCode,
|
|
|
+ offerPrice: item.supplyPrice,
|
|
|
+ supplyCycle: item.supplyCycle
|
|
|
+ }))
|
|
|
+ };
|
|
|
+
|
|
|
+ await updateContractsupply(submitData);
|
|
|
+ ElMessage.success('保存成功');
|
|
|
+ router.back();
|
|
|
+ } catch (e) {
|
|
|
+ console.error('保存失败:', e);
|
|
|
+ ElMessage.error('保存失败');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+onMounted(() => {
|
|
|
+ getSupplierData(); // 先加载供应商列表
|
|
|
+ getDetail();
|
|
|
+ getCompanyData();
|
|
|
+ getProductList(); // 页面加载时获取商品列表
|
|
|
+});
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+.app-container {
|
|
|
+ background: #f0f2f5;
|
|
|
+ min-height: 100vh;
|
|
|
+ padding: 0;
|
|
|
+}
|
|
|
+
|
|
|
+.detail-header {
|
|
|
+ background: #fff;
|
|
|
+ padding: 16px 24px;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ border-bottom: 1px solid #e8e8e8;
|
|
|
+ margin-bottom: 16px;
|
|
|
+}
|
|
|
+
|
|
|
+.back-icon {
|
|
|
+ font-size: 18px;
|
|
|
+ cursor: pointer;
|
|
|
+ margin-right: 12px;
|
|
|
+ color: #666;
|
|
|
+}
|
|
|
+
|
|
|
+.back-icon:hover {
|
|
|
+ color: #409eff;
|
|
|
+}
|
|
|
+
|
|
|
+.header-title {
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: 500;
|
|
|
+ color: #333;
|
|
|
+}
|
|
|
+
|
|
|
+.form-card {
|
|
|
+ margin: 16px;
|
|
|
+ padding: 24px;
|
|
|
+}
|
|
|
+
|
|
|
+.section-title {
|
|
|
+ margin: 20px 0;
|
|
|
+ padding-bottom: 12px;
|
|
|
+ border-bottom: 1px solid #e8e8e8;
|
|
|
+}
|
|
|
+</style>
|