|
@@ -8,7 +8,10 @@
|
|
|
|
|
|
|
|
<section class="panel">
|
|
<section class="panel">
|
|
|
<div class="panel-top">
|
|
<div class="panel-top">
|
|
|
- <h2>参数列表</h2>
|
|
|
|
|
|
|
+ <div class="panel-title">
|
|
|
|
|
+ <el-icon class="title-ic"><Setting /></el-icon>
|
|
|
|
|
+ <span>参数列表</span>
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="filter-block">
|
|
<div class="filter-block">
|
|
@@ -18,7 +21,7 @@
|
|
|
<el-input v-model="searchForm.keyword" placeholder="参数名称/编码" clearable @keyup.enter="handleSearch" />
|
|
<el-input v-model="searchForm.keyword" placeholder="参数名称/编码" clearable @keyup.enter="handleSearch" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item label="状态">
|
|
<el-form-item label="状态">
|
|
|
- <el-select v-model="searchForm.isActive" placeholder="全部" clearable style="width: 120px">
|
|
|
|
|
|
|
+ <el-select v-model="searchForm.isActive" placeholder="全部" clearable>
|
|
|
<el-option label="全部" :value="undefined" />
|
|
<el-option label="全部" :value="undefined" />
|
|
|
<el-option label="启用" :value="1" />
|
|
<el-option label="启用" :value="1" />
|
|
|
<el-option label="禁用" :value="0" />
|
|
<el-option label="禁用" :value="0" />
|
|
@@ -38,12 +41,13 @@
|
|
|
<!-- 操作栏 -->
|
|
<!-- 操作栏 -->
|
|
|
<div class="list-toolbar">
|
|
<div class="list-toolbar">
|
|
|
<div class="list-toolbar-row">
|
|
<div class="list-toolbar-row">
|
|
|
|
|
+ <div class="list-toolbar-selected">已选 <span class="sel-num">{{ selectedRows.length }}</span> 项</div>
|
|
|
<el-button class="btn-main" type="primary" @click="handleAdd">
|
|
<el-button class="btn-main" type="primary" @click="handleAdd">
|
|
|
<el-icon><Plus /></el-icon>
|
|
<el-icon><Plus /></el-icon>
|
|
|
新增参数
|
|
新增参数
|
|
|
</el-button>
|
|
</el-button>
|
|
|
|
|
|
|
|
- <el-button class="btn-ghost" type="danger" :disabled="selectedRows.length === 0" @click="handleBatchDelete">
|
|
|
|
|
|
|
+ <el-button class="btn-ghost" :disabled="selectedRows.length === 0" @click="handleBatchDelete">
|
|
|
批量删除
|
|
批量删除
|
|
|
</el-button>
|
|
</el-button>
|
|
|
|
|
|
|
@@ -54,6 +58,7 @@
|
|
|
:filename="parameterExportFilename"
|
|
:filename="parameterExportFilename"
|
|
|
sheetName="参数数据"
|
|
sheetName="参数数据"
|
|
|
:columns="parameterExportColumns"
|
|
:columns="parameterExportColumns"
|
|
|
|
|
+ type="default"
|
|
|
>
|
|
>
|
|
|
批量导出
|
|
批量导出
|
|
|
</ArtExcelExport>
|
|
</ArtExcelExport>
|
|
@@ -65,12 +70,13 @@
|
|
|
:columns="parameterImportTemplateColumns"
|
|
:columns="parameterImportTemplateColumns"
|
|
|
:showSuccessMessage="false"
|
|
:showSuccessMessage="false"
|
|
|
:showErrorMessage="false"
|
|
:showErrorMessage="false"
|
|
|
|
|
+ type="default"
|
|
|
>
|
|
>
|
|
|
下载导入模板
|
|
下载导入模板
|
|
|
</ArtExcelExport>
|
|
</ArtExcelExport>
|
|
|
|
|
|
|
|
<ArtExcelImport @import-success="handleParameterImportSuccess" @import-error="handleExcelImportError">
|
|
<ArtExcelImport @import-success="handleParameterImportSuccess" @import-error="handleExcelImportError">
|
|
|
- 批量导入
|
|
|
|
|
|
|
+ <el-button class="btn-ghost">批量导入</el-button>
|
|
|
</ArtExcelImport>
|
|
</ArtExcelImport>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -79,7 +85,7 @@
|
|
|
<div class="list-body list-wrap">
|
|
<div class="list-body list-wrap">
|
|
|
<el-table class="list-table" :data="tableData" v-loading="loading" stripe row-key="id" @selection-change="handleSelectionChange">
|
|
<el-table class="list-table" :data="tableData" v-loading="loading" stripe row-key="id" @selection-change="handleSelectionChange">
|
|
|
<el-table-column type="selection" width="55" />
|
|
<el-table-column type="selection" width="55" />
|
|
|
- <el-table-column prop="name" label="参数名称" min-width="120" />
|
|
|
|
|
|
|
+ <el-table-column prop="name" label="参数名称" min-width="100" />
|
|
|
<el-table-column prop="code" label="参数编码" min-width="120" />
|
|
<el-table-column prop="code" label="参数编码" min-width="120" />
|
|
|
<el-table-column prop="paramType" label="输入类型" width="120">
|
|
<el-table-column prop="paramType" label="输入类型" width="120">
|
|
|
<template #default="{ row }">
|
|
<template #default="{ row }">
|
|
@@ -119,7 +125,7 @@
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
<el-table-column prop="sortOrder" label="排序" width="80" align="center" />
|
|
<el-table-column prop="sortOrder" label="排序" width="80" align="center" />
|
|
|
- <el-table-column label="操作" width="180" fixed="right">
|
|
|
|
|
|
|
+ <el-table-column label="操作" width="260" fixed="right" align="center" header-align="center">
|
|
|
<template #default="{ row }">
|
|
<template #default="{ row }">
|
|
|
<el-button class="btn-op-item primary" @click="handleView(row)">详情</el-button>
|
|
<el-button class="btn-op-item primary" @click="handleView(row)">详情</el-button>
|
|
|
<el-button class="btn-op-item" @click="handleEdit(row)">编辑</el-button>
|
|
<el-button class="btn-op-item" @click="handleEdit(row)">编辑</el-button>
|
|
@@ -143,86 +149,132 @@
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<!-- 新增/编辑弹窗 -->
|
|
<!-- 新增/编辑弹窗 -->
|
|
|
- <el-dialog v-model="dialogVisible" :title="dialogTitle" width="600px" @close="handleDialogClose">
|
|
|
|
|
- <el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px">
|
|
|
|
|
- <el-form-item label="参数名称" prop="name">
|
|
|
|
|
- <el-input v-model="formData.name" placeholder="请输入参数名称" />
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- <el-form-item label="参数编码" prop="code">
|
|
|
|
|
- <el-input v-model="formData.code" placeholder="如: grade" :disabled="isEdit" />
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- <el-form-item label="输入类型" prop="paramType">
|
|
|
|
|
- <el-radio-group v-model="formData.paramType">
|
|
|
|
|
- <el-radio value="text">文本输入</el-radio>
|
|
|
|
|
- <el-radio value="select">单选下拉</el-radio>
|
|
|
|
|
- <el-radio value="multi_select">多选</el-radio>
|
|
|
|
|
- </el-radio-group>
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- <el-form-item v-if="formData.paramType !== 'text'" label="可选值" prop="options">
|
|
|
|
|
- <el-input
|
|
|
|
|
- v-model="formData.optionsText"
|
|
|
|
|
- type="textarea"
|
|
|
|
|
- :rows="3"
|
|
|
|
|
- placeholder="每行一个选项"
|
|
|
|
|
- />
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- <el-form-item label="输入提示" prop="placeholder">
|
|
|
|
|
- <el-input v-model="formData.placeholder" placeholder="请输入提示文字" />
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- <el-form-item label="是否必填" prop="isRequired">
|
|
|
|
|
- <el-switch v-model="formData.isRequired" :active-value="1" :inactive-value="0" />
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- <el-form-item label="状态" prop="isActive">
|
|
|
|
|
- <el-switch v-model="formData.isActive" :active-value="1" :inactive-value="0" />
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- <el-form-item label="排序" prop="sortOrder">
|
|
|
|
|
- <el-input-number v-model="formData.sortOrder" :min="0" :max="9999" />
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- <el-form-item label="备注" prop="remark">
|
|
|
|
|
- <el-input v-model="formData.remark" type="textarea" :rows="2" />
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
|
|
+ <el-dialog v-model="dialogVisible" :title="dialogTitle" width="640px" @close="handleDialogClose">
|
|
|
|
|
+ <el-form ref="formRef" :model="formData" :rules="formRules" label-position="top" class="parameter-dialog-form">
|
|
|
|
|
+ <div class="form-grid-2">
|
|
|
|
|
+ <el-form-item label="参数名称" prop="name">
|
|
|
|
|
+ <el-input v-model="formData.name" placeholder="请输入参数名称" />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="参数编码" prop="code">
|
|
|
|
|
+ <el-input v-model="formData.code" placeholder="如: grade" :disabled="isEdit" />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="输入类型" prop="paramType" class="form-col-span-2">
|
|
|
|
|
+ <el-radio-group v-model="formData.paramType">
|
|
|
|
|
+ <el-radio value="text">文本输入</el-radio>
|
|
|
|
|
+ <el-radio value="select">单选下拉</el-radio>
|
|
|
|
|
+ <el-radio value="multi_select">多选</el-radio>
|
|
|
|
|
+ </el-radio-group>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item v-if="formData.paramType !== 'text'" label="可选值" prop="options" class="form-col-span-2">
|
|
|
|
|
+ <el-input
|
|
|
|
|
+ v-model="formData.optionsText"
|
|
|
|
|
+ type="textarea"
|
|
|
|
|
+ :rows="3"
|
|
|
|
|
+ placeholder="每行一个选项"
|
|
|
|
|
+ />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="输入提示" prop="placeholder">
|
|
|
|
|
+ <el-input v-model="formData.placeholder" placeholder="请输入提示文字" />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="排序" prop="sortOrder">
|
|
|
|
|
+ <el-input-number v-model="formData.sortOrder" :min="0" :max="9999" />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="是否必填" prop="isRequired">
|
|
|
|
|
+ <el-switch v-model="formData.isRequired" :active-value="1" :inactive-value="0" />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="状态" prop="isActive">
|
|
|
|
|
+ <el-switch v-model="formData.isActive" :active-value="1" :inactive-value="0" />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="备注" prop="remark" class="form-col-span-2">
|
|
|
|
|
+ <el-input v-model="formData.remark" type="textarea" :rows="2" />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </div>
|
|
|
</el-form>
|
|
</el-form>
|
|
|
<template #footer>
|
|
<template #footer>
|
|
|
- <el-button class="btn-ghost" @click="dialogVisible = false">取消</el-button>
|
|
|
|
|
- <el-button class="btn-main" type="primary" @click="handleSubmit" :loading="submitLoading">确定</el-button>
|
|
|
|
|
|
|
+ <el-button class="btn-ghost" @click="dialogVisible = false">
|
|
|
|
|
+ <el-icon><Close /></el-icon>
|
|
|
|
|
+ 取消
|
|
|
|
|
+ </el-button>
|
|
|
|
|
+ <el-button class="btn-main" type="primary" @click="handleSubmit" :loading="submitLoading">
|
|
|
|
|
+ <el-icon><Check /></el-icon>
|
|
|
|
|
+ 确定
|
|
|
|
|
+ </el-button>
|
|
|
</template>
|
|
</template>
|
|
|
</el-dialog>
|
|
</el-dialog>
|
|
|
|
|
|
|
|
<!-- 查看详情弹窗 -->
|
|
<!-- 查看详情弹窗 -->
|
|
|
- <el-dialog v-model="viewVisible" title="参数详情" width="600px">
|
|
|
|
|
- <el-descriptions :column="2" border>
|
|
|
|
|
- <el-descriptions-item label="参数名称">{{ viewData.name }}</el-descriptions-item>
|
|
|
|
|
- <el-descriptions-item label="参数编码">{{ viewData.code }}</el-descriptions-item>
|
|
|
|
|
- <el-descriptions-item label="输入类型">
|
|
|
|
|
- <el-tag
|
|
|
|
|
- :type="getParamTypeTagType(viewData.paramType)"
|
|
|
|
|
- :effect="getParamTypeTagEffect(viewData.paramType)"
|
|
|
|
|
- :class="{ 'tag-neutral': viewData.paramType === 'text' }"
|
|
|
|
|
- size="small"
|
|
|
|
|
- >
|
|
|
|
|
- {{ getParamTypeText(viewData.paramType) }}
|
|
|
|
|
- </el-tag>
|
|
|
|
|
- </el-descriptions-item>
|
|
|
|
|
- <el-descriptions-item label="是否必填">
|
|
|
|
|
- <el-tag
|
|
|
|
|
- :type="viewData.isRequired === 1 ? 'danger' : 'info'"
|
|
|
|
|
- :effect="'light'"
|
|
|
|
|
- :class="{ 'tag-neutral': viewData.isRequired !== 1 }"
|
|
|
|
|
- size="small"
|
|
|
|
|
- >
|
|
|
|
|
- {{ viewData.isRequired === 1 ? '是' : '否' }}
|
|
|
|
|
- </el-tag>
|
|
|
|
|
- </el-descriptions-item>
|
|
|
|
|
- <el-descriptions-item label="可选值">{{ viewData.options ? formatOptions(viewData.options) : '-' }}</el-descriptions-item>
|
|
|
|
|
- <el-descriptions-item label="输入提示">{{ viewData.placeholder || '-' }}</el-descriptions-item>
|
|
|
|
|
- <el-descriptions-item label="排序">{{ viewData.sortOrder }}</el-descriptions-item>
|
|
|
|
|
- <el-descriptions-item label="状态">
|
|
|
|
|
- <el-tag :type="viewData.isActive === 1 ? 'success' : 'info'" size="small">
|
|
|
|
|
- {{ viewData.isActive === 1 ? '启用' : '禁用' }}
|
|
|
|
|
- </el-tag>
|
|
|
|
|
- </el-descriptions-item>
|
|
|
|
|
- <el-descriptions-item label="备注" :span="2">{{ viewData.remark || '-' }}</el-descriptions-item>
|
|
|
|
|
- </el-descriptions>
|
|
|
|
|
|
|
+ <el-dialog v-model="viewVisible" title="参数详情" width="680px" class="parameter-view-dialog">
|
|
|
|
|
+ <div class="parameter-view-body">
|
|
|
|
|
+ <div class="view-hero">
|
|
|
|
|
+ <div class="view-hero-main">
|
|
|
|
|
+ <h2>{{ viewData.name || '参数详情' }}</h2>
|
|
|
|
|
+ <div class="view-hero-tags">
|
|
|
|
|
+ <el-tag
|
|
|
|
|
+ :type="getParamTypeTagType(viewData.paramType)"
|
|
|
|
|
+ :effect="getParamTypeTagEffect(viewData.paramType)"
|
|
|
|
|
+ :class="{ 'tag-neutral': viewData.paramType === 'text' }"
|
|
|
|
|
+ size="small"
|
|
|
|
|
+ >
|
|
|
|
|
+ {{ getParamTypeText(viewData.paramType) }}
|
|
|
|
|
+ </el-tag>
|
|
|
|
|
+ <el-tag :type="viewData.isActive === 1 ? 'success' : 'info'" size="small">
|
|
|
|
|
+ {{ viewData.isActive === 1 ? '启用' : '禁用' }}
|
|
|
|
|
+ </el-tag>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <p class="view-hero-meta">参数编码:{{ viewData.code || '—' }}</p>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <div class="view-section">
|
|
|
|
|
+ <h3>基础信息</h3>
|
|
|
|
|
+ <dl class="view-kv-grid">
|
|
|
|
|
+ <div class="view-kv">
|
|
|
|
|
+ <dt>参数名称</dt>
|
|
|
|
|
+ <dd>{{ viewData.name || '—' }}</dd>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="view-kv">
|
|
|
|
|
+ <dt>参数编码</dt>
|
|
|
|
|
+ <dd>{{ viewData.code || '—' }}</dd>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="view-kv">
|
|
|
|
|
+ <dt>输入类型</dt>
|
|
|
|
|
+ <dd>{{ getParamTypeText(viewData.paramType) }}</dd>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="view-kv">
|
|
|
|
|
+ <dt>是否必填</dt>
|
|
|
|
|
+ <dd>{{ viewData.isRequired === 1 ? '是' : '否' }}</dd>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="view-kv">
|
|
|
|
|
+ <dt>状态</dt>
|
|
|
|
|
+ <dd>
|
|
|
|
|
+ <el-switch :model-value="viewData.isActive === 1" disabled />
|
|
|
|
|
+ </dd>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="view-kv">
|
|
|
|
|
+ <dt>排序</dt>
|
|
|
|
|
+ <dd>{{ viewData.sortOrder ?? 0 }}</dd>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="view-kv view-kv-span-2">
|
|
|
|
|
+ <dt>输入提示</dt>
|
|
|
|
|
+ <dd>{{ viewData.placeholder || '—' }}</dd>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="view-kv view-kv-span-2">
|
|
|
|
|
+ <dt>可选值</dt>
|
|
|
|
|
+ <dd>{{ viewData.options ? formatOptions(viewData.options) : '—' }}</dd>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="view-kv view-kv-span-2">
|
|
|
|
|
+ <dt>备注</dt>
|
|
|
|
|
+ <dd class="view-multiline">{{ viewData.remark || '—' }}</dd>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </dl>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <template #footer>
|
|
|
|
|
+ <el-button class="btn-ghost" @click="viewVisible = false">
|
|
|
|
|
+ <el-icon><Close /></el-icon>
|
|
|
|
|
+ 关闭
|
|
|
|
|
+ </el-button>
|
|
|
|
|
+ </template>
|
|
|
</el-dialog>
|
|
</el-dialog>
|
|
|
</section>
|
|
</section>
|
|
|
</div>
|
|
</div>
|
|
@@ -232,7 +284,7 @@
|
|
|
import { ref, reactive, onMounted, computed } from 'vue'
|
|
import { ref, reactive, onMounted, computed } from 'vue'
|
|
|
import { ElMessage, ElMessageBox, FormInstance, FormRules } from 'element-plus'
|
|
import { ElMessage, ElMessageBox, FormInstance, FormRules } from 'element-plus'
|
|
|
import { withFullscreenLoading, fullscreenLoadingText } from '@/utils/fullscreen-loading'
|
|
import { withFullscreenLoading, fullscreenLoadingText } from '@/utils/fullscreen-loading'
|
|
|
-import { Plus } from '@element-plus/icons-vue'
|
|
|
|
|
|
|
+import { Check, Close, Plus, Setting } from '@element-plus/icons-vue'
|
|
|
import {
|
|
import {
|
|
|
fetchProductParameterList,
|
|
fetchProductParameterList,
|
|
|
fetchCreateProductParameter,
|
|
fetchCreateProductParameter,
|
|
@@ -797,4 +849,127 @@ onMounted(() => {
|
|
|
border-color: #e4e7ed;
|
|
border-color: #e4e7ed;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+.parameter-dialog-form :deep(.el-form-item__label) {
|
|
|
|
|
+ height: auto !important;
|
|
|
|
|
+ line-height: 1.25 !important;
|
|
|
|
|
+ padding: 0 0 6px !important;
|
|
|
|
|
+ font-size: 11px;
|
|
|
|
|
+ color: var(--mint-text-muted);
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.form-grid-2 {
|
|
|
|
|
+ display: grid;
|
|
|
|
|
+ grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
|
|
|
+ gap: 0 14px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.form-col-span-2 {
|
|
|
|
|
+ grid-column: 1 / -1;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.parameter-view-body {
|
|
|
|
|
+ max-height: 62vh;
|
|
|
|
|
+ overflow-y: auto;
|
|
|
|
|
+ padding-right: 6px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.view-hero {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: flex-start;
|
|
|
|
|
+ gap: 16px;
|
|
|
|
|
+ padding: 16px;
|
|
|
|
|
+ margin-bottom: 12px;
|
|
|
|
|
+ background: linear-gradient(135deg, var(--mint-primary-bg) 0%, var(--mint-surface) 55%);
|
|
|
|
|
+ border: 1px solid var(--mint-border);
|
|
|
|
|
+ border-radius: 10px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.view-hero-main {
|
|
|
|
|
+ flex: 1;
|
|
|
|
|
+ min-width: 220px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.view-hero-main h2 {
|
|
|
|
|
+ margin: 0 0 8px;
|
|
|
|
|
+ font-size: 18px;
|
|
|
|
|
+ font-weight: 700;
|
|
|
|
|
+ letter-spacing: -0.02em;
|
|
|
|
|
+ color: var(--mint-text);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.view-hero-tags {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-wrap: wrap;
|
|
|
|
|
+ gap: 8px;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.view-hero-meta {
|
|
|
|
|
+ margin: 10px 0 0;
|
|
|
|
|
+ font-size: 13px;
|
|
|
|
|
+ color: var(--mint-text-muted);
|
|
|
|
|
+ line-height: 1.5;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.view-section {
|
|
|
|
|
+ padding: 4px 2px 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.view-section h3 {
|
|
|
|
|
+ margin: 0 0 12px;
|
|
|
|
|
+ font-size: 13px;
|
|
|
|
|
+ font-weight: 700;
|
|
|
|
|
+ color: var(--mint-text-muted);
|
|
|
|
|
+ letter-spacing: 0.06em;
|
|
|
|
|
+ text-transform: uppercase;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.view-kv-grid {
|
|
|
|
|
+ display: grid;
|
|
|
|
|
+ grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
|
|
|
+ gap: 12px 24px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.view-kv {
|
|
|
|
|
+ margin: 0;
|
|
|
|
|
+ display: grid;
|
|
|
|
|
+ grid-template-columns: 92px 1fr;
|
|
|
|
|
+ gap: 8px 12px;
|
|
|
|
|
+ align-items: start;
|
|
|
|
|
+ font-size: 13px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.view-kv dt {
|
|
|
|
|
+ margin: 0;
|
|
|
|
|
+ color: var(--mint-text-muted);
|
|
|
|
|
+ font-weight: 500;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.view-kv dd {
|
|
|
|
|
+ margin: 0;
|
|
|
|
|
+ color: var(--mint-text);
|
|
|
|
|
+ word-break: break-word;
|
|
|
|
|
+ font-weight: 500;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.view-kv-span-2 {
|
|
|
|
|
+ grid-column: 1 / -1;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.view-multiline {
|
|
|
|
|
+ white-space: pre-wrap;
|
|
|
|
|
+ line-height: 1.6;
|
|
|
|
|
+ color: var(--mint-text);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+@media (max-width: 760px) {
|
|
|
|
|
+ .view-kv-grid {
|
|
|
|
|
+ grid-template-columns: 1fr;
|
|
|
|
|
+ }
|
|
|
|
|
+ .view-kv-span-2 {
|
|
|
|
|
+ grid-column: auto;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
</style>
|
|
</style>
|