|
|
@@ -1,38 +1,217 @@
|
|
|
<template>
|
|
|
<main class="safety-platform-container__main">
|
|
|
- <BasicForm
|
|
|
- ref="basicFormRef"
|
|
|
- :formData="ruleFormData"
|
|
|
- :formRules="isViewMode ? undefined : formRules"
|
|
|
- :formConfig="computedFormConfig"
|
|
|
+ <el-form
|
|
|
+ ref="formRef"
|
|
|
+ :model="form"
|
|
|
+ :rules="formRules"
|
|
|
+ label-width="120px"
|
|
|
+ class="purchase-apply-form"
|
|
|
>
|
|
|
- <template #status>
|
|
|
- <el-radio-group v-model="ruleFormData.status" :disabled="isViewMode">
|
|
|
- <el-radio label="ENABLE">启用</el-radio>
|
|
|
- <el-radio label="DISABLE">禁用</el-radio>
|
|
|
- </el-radio-group>
|
|
|
+ <!-- 申请单号:仅非新增时显示;查看/审核为纯文本 -->
|
|
|
+ <el-form-item v-if="!isCreateMode" label="申请单号" prop="applyNo" required>
|
|
|
+ <span v-if="isViewMode || isAuditMode" class="apply-no-text">{{ form.applyNo || '-' }}</span>
|
|
|
+ <el-input
|
|
|
+ v-else
|
|
|
+ v-model="form.applyNo"
|
|
|
+ placeholder="申请单号"
|
|
|
+ readonly
|
|
|
+ class="apply-no-input"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <!-- 劳防用品明细表 -->
|
|
|
+ <div class="table-section">
|
|
|
+ <el-table :data="form.itemList" border size="default" class="items-table">
|
|
|
+ <el-table-column type="index" label="编号" width="100" align="center" />
|
|
|
+ <el-table-column label="劳防用品名称" min-width="140">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <span v-if="isViewMode || isAuditMode">{{ row.ppeName || '-' }}</span>
|
|
|
+ <el-select
|
|
|
+ v-else
|
|
|
+ v-model="row.ppeName"
|
|
|
+ placeholder="请选择"
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
+ style="width: 100%"
|
|
|
+ @change="onPpeSelect(row, $event)"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in ppeOptions"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.ppeName"
|
|
|
+ :value="item.ppeName"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="样式照片" min-width="420" align="center">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <span v-if="isViewMode || isAuditMode">{{ getStylePhotoDisplay(row) }}</span>
|
|
|
+ <UploadFiles
|
|
|
+ v-else
|
|
|
+ label="选择附件"
|
|
|
+ :file-list="getRowFileList(row)"
|
|
|
+ :max-count="1"
|
|
|
+ @uploadSuccess="(list: FileItem[]) => onStylePhotoSuccess(row, list)"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="物品尺寸/鞋码" min-width="150">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <span v-if="isViewMode || isAuditMode">{{ row.sizeOrShoeSize || '-' }}</span>
|
|
|
+ <el-input
|
|
|
+ v-else
|
|
|
+ v-model="row.sizeOrShoeSize"
|
|
|
+ placeholder="请输入..."
|
|
|
+ clearable
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="需求数量" min-width="150">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <span v-if="isViewMode || isAuditMode">{{ row.requiredQty ?? '-' }}</span>
|
|
|
+ <el-input-number
|
|
|
+ v-else
|
|
|
+ v-model="row.requiredQty"
|
|
|
+ :min="1"
|
|
|
+ :precision="0"
|
|
|
+ placeholder="请输入..."
|
|
|
+ controls-position="right"
|
|
|
+ style="width: 100%"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="规格、型号、类型" min-width="200">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <span v-if="isViewMode || isAuditMode">{{ row.specModelType || '-' }}</span>
|
|
|
+ <el-input
|
|
|
+ v-else
|
|
|
+ v-model="row.specModelType"
|
|
|
+ placeholder="请输入..."
|
|
|
+ clearable
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="单价/元" min-width="150">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <span v-if="isViewMode || isAuditMode">{{ row.unitPrice ?? '-' }}</span>
|
|
|
+ <el-input
|
|
|
+ v-else
|
|
|
+ v-model="row.unitPrice"
|
|
|
+ placeholder="请输入..."
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="商品编号" min-width="150">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <span v-if="isViewMode || isAuditMode">{{ row.productNo || '-' }}</span>
|
|
|
+ <el-input
|
|
|
+ v-else
|
|
|
+ v-model="row.productNo"
|
|
|
+ placeholder="请输入..."
|
|
|
+ clearable
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="备注" min-width="150">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <span v-if="isViewMode || isAuditMode">{{ row.remark || '-' }}</span>
|
|
|
+ <el-input
|
|
|
+ v-else
|
|
|
+ v-model="row.remark"
|
|
|
+ placeholder="请输入..."
|
|
|
+ clearable
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column v-if="!isViewMode && !isAuditMode" label="操作" width="150" fixed="right" align="center">
|
|
|
+ <template #default="{ $index }">
|
|
|
+ <el-button type="primary" circle size="small" @click="addRow">
|
|
|
+ <el-icon><Plus /></el-icon>
|
|
|
+ </el-button>
|
|
|
+ <el-button
|
|
|
+ type="danger"
|
|
|
+ circle
|
|
|
+ size="small"
|
|
|
+ :disabled="form.itemList.length <= 1"
|
|
|
+ @click="removeRow($index)"
|
|
|
+ >
|
|
|
+ <el-icon><Minus /></el-icon>
|
|
|
+ </el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ </el-form>
|
|
|
+
|
|
|
+ <footer class="safety-platform-container__footer">
|
|
|
+ <el-button @click="router.back()">返回</el-button>
|
|
|
+ <template v-if="isCreateMode || isEditMode">
|
|
|
+ <el-button type="primary" :loading="submitting" @click="handleSubmit">
|
|
|
+ {{ isCreateMode ? '提交' : '保存' }}
|
|
|
+ </el-button>
|
|
|
+ </template>
|
|
|
+ <template v-if="isAuditMode">
|
|
|
+ <el-button type="success" :loading="auditSubmitting" @click="handleAuditPass">
|
|
|
+ 审核通过
|
|
|
+ </el-button>
|
|
|
+ <el-button type="danger" :loading="auditSubmitting" @click="showRejectDialog = true">
|
|
|
+ 审核不通过
|
|
|
+ </el-button>
|
|
|
+ </template>
|
|
|
+ </footer>
|
|
|
+
|
|
|
+ <!-- 审核不通过原因 -->
|
|
|
+ <el-dialog
|
|
|
+ v-model="showRejectDialog"
|
|
|
+ title="审核不通过"
|
|
|
+ width="400px"
|
|
|
+ destroy-on-close
|
|
|
+ @close="rejectReason = ''"
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ v-model="rejectReason"
|
|
|
+ type="textarea"
|
|
|
+ :rows="3"
|
|
|
+ placeholder="请输入审核不通过原因"
|
|
|
+ />
|
|
|
+ <template #footer>
|
|
|
+ <el-button @click="showRejectDialog = false">取消</el-button>
|
|
|
+ <el-button type="danger" :loading="auditSubmitting" @click="handleAuditReject">
|
|
|
+ 确定
|
|
|
+ </el-button>
|
|
|
</template>
|
|
|
- </BasicForm>
|
|
|
+ </el-dialog>
|
|
|
</main>
|
|
|
- <footer class="safety-platform-container__footer">
|
|
|
- <el-button @click="router.back()">返回</el-button>
|
|
|
- <el-button v-if="!isViewMode" type="primary" @click="handleSubmit">
|
|
|
- {{ isCreateMode ? '提交' : '保存' }}
|
|
|
- </el-button>
|
|
|
- </footer>
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
- import { computed, onMounted, ref } from 'vue';
|
|
|
+ import { computed, onMounted, ref, reactive } from 'vue';
|
|
|
import { useRoute, useRouter } from 'vue-router';
|
|
|
import { ElMessage } from 'element-plus';
|
|
|
- import BasicForm from '@/components/BasicForm.vue';
|
|
|
- import { useFormConfigHook } from '@/hooks/useFormConfigHook';
|
|
|
- import { INVENTORY_FORM_CONFIG, INVENTORY_FORM_DATA, INVENTORY_FORM_RULES } from '../configs/form';
|
|
|
- import { queryInventoryDetail, saveInventory, updateInventory } from '@/api/inventory';
|
|
|
+ import type { FormInstance, FormRules } from 'element-plus';
|
|
|
+ import { Plus, Minus } from '@element-plus/icons-vue';
|
|
|
+ import UploadFiles from '@/components/UploadFiles/UploadFiles.vue';
|
|
|
+ import type { FileItem } from '@/components/UploadFiles/types';
|
|
|
+ import { queryPersonalProtectiveEquipmentList } from '@/api/production-safety/personal-protective-equipment';
|
|
|
+ import type { PersonalProtectiveEquipment } from '@/api/production-safety/personal-protective-equipment';
|
|
|
+ import {
|
|
|
+ queryPurchaseApplyDetail,
|
|
|
+ savePurchaseApply,
|
|
|
+ updatePurchaseApply,
|
|
|
+ auditPurchaseApply,
|
|
|
+ type PersonalProtectiveEquipmentPurchaseApply,
|
|
|
+ type PurchaseApplyItem,
|
|
|
+ } from '@/api/production-safety/personal-protective-equipment-purchase-apply';
|
|
|
+ import type { QueryPageRequest } from '@/types/basic-query';
|
|
|
|
|
|
const router = useRouter();
|
|
|
const route = useRoute();
|
|
|
+ const formRef = ref<FormInstance>();
|
|
|
+ const submitting = ref(false);
|
|
|
+ const auditSubmitting = ref(false);
|
|
|
+ const showRejectDialog = ref(false);
|
|
|
+ const rejectReason = ref('');
|
|
|
|
|
|
const operate = computed(() => (route.query.operate as string) || 'inventory-create');
|
|
|
const currentId = computed(() => Number(route.query.id));
|
|
|
@@ -40,97 +219,209 @@
|
|
|
const isCreateMode = computed(() => operate.value === 'inventory-create');
|
|
|
const isEditMode = computed(() => operate.value === 'inventory-edit');
|
|
|
const isViewMode = computed(() => operate.value === 'inventory-view');
|
|
|
+ const isAuditMode = computed(() => operate.value === 'audit');
|
|
|
|
|
|
- const { ruleFormData, formRules, ruleFormConfig, cloneRuleFormData, beforeRouteLeave } =
|
|
|
- useFormConfigHook(INVENTORY_FORM_CONFIG, INVENTORY_FORM_DATA, INVENTORY_FORM_RULES);
|
|
|
-
|
|
|
- // 查看模式下,所有字段设为只读
|
|
|
- const viewFormConfig = ref(
|
|
|
- INVENTORY_FORM_CONFIG.map((item) => ({
|
|
|
- ...item,
|
|
|
- componentProps: {
|
|
|
- ...item.componentProps,
|
|
|
- disabled: true,
|
|
|
- },
|
|
|
- })),
|
|
|
- );
|
|
|
-
|
|
|
- const computedFormConfig = computed(() => {
|
|
|
- if (isViewMode.value) {
|
|
|
- return viewFormConfig.value;
|
|
|
- }
|
|
|
- return ruleFormConfig.value;
|
|
|
+ const ppeOptions = ref<PersonalProtectiveEquipment[]>([]);
|
|
|
+
|
|
|
+ const defaultItem = (): PurchaseApplyItem => ({
|
|
|
+ ppeName: '',
|
|
|
+ ppeId: undefined,
|
|
|
+ stylePhoto: '',
|
|
|
+ sizeOrShoeSize: '',
|
|
|
+ requiredQty: undefined,
|
|
|
+ specModelType: '',
|
|
|
+ unitPrice: undefined,
|
|
|
+ productNo: '',
|
|
|
+ remark: '',
|
|
|
});
|
|
|
|
|
|
- const basicFormRef = ref<InstanceType<typeof BasicForm>>();
|
|
|
+ const form = reactive<PersonalProtectiveEquipmentPurchaseApply & { itemList: PurchaseApplyItem[] }>({
|
|
|
+ applyNo: '',
|
|
|
+ itemList: [defaultItem()],
|
|
|
+ });
|
|
|
|
|
|
- const handleValidate = async () => {
|
|
|
- if (!basicFormRef.value) return;
|
|
|
- const res = await basicFormRef.value.validateForm();
|
|
|
- return res;
|
|
|
+ const formRules: FormRules = {
|
|
|
+ applyNo: [{ required: true, message: '申请单号不能为空', trigger: 'blur' }],
|
|
|
};
|
|
|
|
|
|
- const getDetail = async () => {
|
|
|
+ function getRowFileList(row: PurchaseApplyItem): FileItem[] {
|
|
|
+ if (!row.stylePhoto) return [];
|
|
|
+ try {
|
|
|
+ const parsed = typeof row.stylePhoto === 'string' ? JSON.parse(row.stylePhoto) : row.stylePhoto;
|
|
|
+ const arr = Array.isArray(parsed) ? parsed : [parsed];
|
|
|
+ return arr.map((f: any) => ({
|
|
|
+ fileId: f.fileId ?? 0,
|
|
|
+ fileName: f.fileName ?? '',
|
|
|
+ fileType: f.fileType ?? 'pdf',
|
|
|
+ fileSize: f.fileSize ?? '',
|
|
|
+ fileUrl: f.fileUrl,
|
|
|
+ }));
|
|
|
+ } catch {
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 查看/审核时样式照片列仅显示文件名文本 */
|
|
|
+ function getStylePhotoDisplay(row: PurchaseApplyItem): string {
|
|
|
+ const list = getRowFileList(row);
|
|
|
+ if (!list.length) return '-';
|
|
|
+ return list.map((f) => f.fileName).filter(Boolean).join('、') || '-';
|
|
|
+ }
|
|
|
+
|
|
|
+ function onStylePhotoSuccess(row: PurchaseApplyItem, list: FileItem[]) {
|
|
|
+ row.stylePhoto = JSON.stringify(
|
|
|
+ list.map((f) => ({ fileUrl: f.fileUrl, fileName: f.fileName, fileId: f.fileId, fileType: f.fileType, fileSize: f.fileSize })),
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ function onPpeSelect(row: PurchaseApplyItem, ppeName: string) {
|
|
|
+ const found = ppeOptions.value.find((p) => p.ppeName === ppeName);
|
|
|
+ if (found?.id) row.ppeId = found.id;
|
|
|
+ }
|
|
|
+
|
|
|
+ function addRow() {
|
|
|
+ form.itemList.push(defaultItem());
|
|
|
+ }
|
|
|
+
|
|
|
+ function removeRow(index: number) {
|
|
|
+ if (form.itemList.length <= 1) return;
|
|
|
+ form.itemList.splice(index, 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ async function loadPpeOptions() {
|
|
|
+ try {
|
|
|
+ const res = await queryPersonalProtectiveEquipmentList({
|
|
|
+ pageNumber: 1,
|
|
|
+ pageSize: 500,
|
|
|
+ queryParam: { },
|
|
|
+ } as QueryPageRequest<any>);
|
|
|
+ const list = res?.records ?? res?.list ?? [];
|
|
|
+ ppeOptions.value = list as PersonalProtectiveEquipment[];
|
|
|
+ } catch (e) {
|
|
|
+ console.error('加载劳防用品列表失败:', e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async function getDetail() {
|
|
|
if (!currentId.value) return;
|
|
|
try {
|
|
|
- const res = await queryInventoryDetail(currentId.value);
|
|
|
+ const res = await queryPurchaseApplyDetail(currentId.value);
|
|
|
if (res) {
|
|
|
- // 映射接口字段到表单字段
|
|
|
- ruleFormData.itemName = res.stuffName; // 物品名称
|
|
|
- ruleFormData.warehouseDate = res.inStoreTime ? res.inStoreTime.split('T')[0] : ''; // 入库日期(YYYY-MM-DD)
|
|
|
- ruleFormData.itemQuantity = res.stuffQty; // 物品数量
|
|
|
- ruleFormData.status = res.status ? 'ENABLE' : 'DISABLE'; // 状态
|
|
|
- ruleFormData.remarks = res.remark || ''; // 备注
|
|
|
+ form.applyNo = res.applyNo ?? '';
|
|
|
+ form.itemList = (res.itemList && res.itemList.length) ? res.itemList.map((it) => ({ ...defaultItem(), ...it })) : [defaultItem()];
|
|
|
}
|
|
|
- cloneRuleFormData();
|
|
|
} catch (e) {
|
|
|
- console.error('获取物品库存详情失败:', e);
|
|
|
+ console.error('获取采购申请详情失败:', e);
|
|
|
ElMessage.error('获取详情失败');
|
|
|
}
|
|
|
- };
|
|
|
+ }
|
|
|
|
|
|
- const handleSubmit = async () => {
|
|
|
- const res = await handleValidate();
|
|
|
- if (!res) return;
|
|
|
- try {
|
|
|
- const basePayload = {
|
|
|
- stuffName: ruleFormData.itemName,
|
|
|
- inStoreTime: ruleFormData.warehouseDate
|
|
|
- ? new Date(ruleFormData.warehouseDate).toISOString()
|
|
|
- : '',
|
|
|
- stuffQty: ruleFormData.itemQuantity,
|
|
|
- status: ruleFormData.status === 'ENABLE',
|
|
|
- remark: ruleFormData.remarks || '',
|
|
|
- };
|
|
|
+ function buildSubmitPayload() {
|
|
|
+ const itemList = form.itemList.map((it) => ({
|
|
|
+ ppeName: it.ppeName,
|
|
|
+ ppeId: it.ppeId,
|
|
|
+ stylePhoto: it.stylePhoto,
|
|
|
+ sizeOrShoeSize: it.sizeOrShoeSize,
|
|
|
+ requiredQty: it.requiredQty,
|
|
|
+ specModelType: it.specModelType,
|
|
|
+ unitPrice: it.unitPrice,
|
|
|
+ productNo: it.productNo,
|
|
|
+ remark: it.remark,
|
|
|
+ }));
|
|
|
+ return {
|
|
|
+ id: currentId.value || undefined,
|
|
|
+ applyNo: form.applyNo || undefined,
|
|
|
+ itemList,
|
|
|
+ };
|
|
|
+ }
|
|
|
|
|
|
+ async function handleSubmit() {
|
|
|
+ const valid = await formRef.value?.validate().catch(() => false);
|
|
|
+ if (!valid) return;
|
|
|
+ if (!form.itemList.length || form.itemList.every((it) => !it.ppeName)) {
|
|
|
+ ElMessage.warning('请至少填写一条劳防用品明细');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ submitting.value = true;
|
|
|
+ try {
|
|
|
+ const payload = buildSubmitPayload();
|
|
|
if (isCreateMode.value) {
|
|
|
- await saveInventory(basePayload);
|
|
|
- ElMessage.success('创建成功');
|
|
|
- } else if (isEditMode.value && currentId.value) {
|
|
|
- await updateInventory({
|
|
|
- id: currentId.value,
|
|
|
- ...basePayload,
|
|
|
- });
|
|
|
+ await savePurchaseApply(payload as PersonalProtectiveEquipmentPurchaseApply);
|
|
|
+ ElMessage.success('提交成功');
|
|
|
+ } else {
|
|
|
+ await updatePurchaseApply(payload as PersonalProtectiveEquipmentPurchaseApply);
|
|
|
ElMessage.success('保存成功');
|
|
|
}
|
|
|
-
|
|
|
router.back();
|
|
|
} catch (e) {
|
|
|
- console.error('保存物品库存失败:', e);
|
|
|
+ console.error('保存失败:', e);
|
|
|
ElMessage.error('保存失败,请重试');
|
|
|
+ } finally {
|
|
|
+ submitting.value = false;
|
|
|
}
|
|
|
- };
|
|
|
+ }
|
|
|
+
|
|
|
+ async function handleAuditPass() {
|
|
|
+ if (!currentId.value) return;
|
|
|
+ auditSubmitting.value = true;
|
|
|
+ try {
|
|
|
+ await auditPurchaseApply({ id: currentId.value, status: 1 });
|
|
|
+ ElMessage.success('审核通过');
|
|
|
+ router.back();
|
|
|
+ } catch (e) {
|
|
|
+ console.error('审核失败:', e);
|
|
|
+ ElMessage.error('审核失败,请重试');
|
|
|
+ } finally {
|
|
|
+ auditSubmitting.value = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async function handleAuditReject() {
|
|
|
+ if (!rejectReason.value?.trim()) {
|
|
|
+ ElMessage.warning('请输入审核不通过原因');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!currentId.value) return;
|
|
|
+ auditSubmitting.value = true;
|
|
|
+ try {
|
|
|
+ await auditPurchaseApply({ id: currentId.value, status: -1, rejectReason: rejectReason.value.trim() });
|
|
|
+ ElMessage.success('已提交审核不通过');
|
|
|
+ showRejectDialog.value = false;
|
|
|
+ router.back();
|
|
|
+ } catch (e) {
|
|
|
+ console.error('审核失败:', e);
|
|
|
+ ElMessage.error('审核失败,请重试');
|
|
|
+ } finally {
|
|
|
+ auditSubmitting.value = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
onMounted(() => {
|
|
|
- cloneRuleFormData();
|
|
|
- beforeRouteLeave();
|
|
|
- if (isEditMode.value || isViewMode.value) {
|
|
|
+ loadPpeOptions();
|
|
|
+ if (isEditMode.value || isViewMode.value || isAuditMode.value) {
|
|
|
getDetail();
|
|
|
+ } else {
|
|
|
+ form.itemList = [defaultItem()];
|
|
|
}
|
|
|
});
|
|
|
</script>
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
@use '@/styles/page-details-layout.scss' as *;
|
|
|
-</style>
|
|
|
|
|
|
+ .purchase-apply-form {
|
|
|
+ max-width: 100%;
|
|
|
+ }
|
|
|
+ .apply-no-input {
|
|
|
+ max-width: 320px;
|
|
|
+ }
|
|
|
+ .apply-no-text {
|
|
|
+ color: var(--el-text-color-regular);
|
|
|
+ }
|
|
|
+ .table-section {
|
|
|
+ margin-top: 16px;
|
|
|
+ }
|
|
|
+ .items-table {
|
|
|
+ width: 100%;
|
|
|
+ }
|
|
|
+</style>
|