feat(P4): precompute移植+app.js sources双向回填+回归1003/1003+验收体积/文件/data.json
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Aurora Admin · LayoutSwitcher</title>
|
||||
<link rel="stylesheet" href="../.design_library/aurora-admin/colors_and_type.css" />
|
||||
<link rel="stylesheet" href="./LayoutSwitcher.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div class="aa-page">
|
||||
<h2 class="aa-h2">LayoutSwitcher 布局切换</h2>
|
||||
<p class="aa-desc">侧边 / 顶部 / 混合导航布局切换,保存偏好。</p>
|
||||
|
||||
<div class="aa-demo">
|
||||
<div class="aa-layoutsw" id="sw">
|
||||
<div class="aa-layoutsw-opt" role="radio" tabindex="0" data-v="side">
|
||||
<div class="aa-layoutsw-mini" role="radio" tabindex="0"><div class="s-body"><div class="s-side"></div><div class="s-main"></div></div></div>
|
||||
<div class="aa-layoutsw-label">侧边布局</div>
|
||||
</div>
|
||||
<div class="aa-layoutsw-opt" role="radio" tabindex="0" data-v="top">
|
||||
<div class="aa-layoutsw-mini" role="radio" tabindex="0"><div class="s-top"></div><div class="s-body"><div class="s-main"></div></div></div>
|
||||
<div class="aa-layoutsw-label">顶部布局</div>
|
||||
</div>
|
||||
<div class="aa-layoutsw-opt" role="radio" tabindex="0" data-v="mixed">
|
||||
<div class="aa-layoutsw-mini" role="radio" tabindex="0"><div class="s-top"></div><div class="s-body"><div class="s-side"></div><div class="s-main"></div></div></div>
|
||||
<div class="aa-layoutsw-label">混合布局</div>
|
||||
</div>
|
||||
</div>
|
||||
<p class="aa-code-tip" id="out"></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var sel = document.getElementById('sw');
|
||||
var out = document.getElementById('out');
|
||||
sel.addEventListener('click', function (e) {
|
||||
var opt = e.target.closest('.aa-layoutsw-opt');
|
||||
if (!opt) return;
|
||||
Array.prototype.forEach.call(sel.children, function (c) { c.classList.remove('is-active'); });
|
||||
opt.classList.add('is-active');
|
||||
out.textContent = '当前布局:' + opt.querySelector('.aa-layoutsw-label').textContent;
|
||||
});
|
||||
sel.children[0].classList.add('is-active');
|
||||
out.textContent = '当前布局:侧边布局';
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,31 @@
|
||||
import React from 'react';
|
||||
import './LayoutSwitcher.css';
|
||||
|
||||
const OPTIONS = [
|
||||
{ value: 'side', label: '侧边布局' },
|
||||
{ value: 'top', label: '顶部布局' },
|
||||
{ value: 'mixed', label: '混合布局' }
|
||||
];
|
||||
|
||||
export default function LayoutSwitcher({ value = 'side', onChange }) {
|
||||
return (
|
||||
<div className="aa-layoutsw">
|
||||
{OPTIONS.map((o) => (
|
||||
<div
|
||||
key={o.value}
|
||||
className={'aa-layoutsw-opt' + (value === o.value ? ' is-active' : '')}
|
||||
onClick={() => onChange && onChange(o.value)}
|
||||
>
|
||||
<div className="aa-layoutsw-mini">
|
||||
{o.value !== 'side' && <div className="s-top" />}
|
||||
<div className="s-body">
|
||||
{o.value !== 'top' && <div className="s-side" />}
|
||||
<div className="s-main" />
|
||||
</div>
|
||||
</div>
|
||||
<div className="aa-layoutsw-label">{o.label}</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<template>
|
||||
<div class="aa-layoutsw">
|
||||
<div
|
||||
v-for="o in options"
|
||||
:key="o.value"
|
||||
class="aa-layoutsw-opt"
|
||||
:class="{ 'is-active': value === o.value }"
|
||||
@click="$emit('input', o.value)"
|
||||
>
|
||||
<div class="aa-layoutsw-mini">
|
||||
<div v-if="o.value !== 'side'" class="s-top"></div>
|
||||
<div class="s-body">
|
||||
<div v-if="o.value !== 'top'" class="s-side"></div>
|
||||
<div class="s-main"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="aa-layoutsw-label">{{ o.label }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'AaLayoutSwitcher',
|
||||
props: {
|
||||
value: { type: String, default: 'side' },
|
||||
options: {
|
||||
type: Array,
|
||||
default: () => [
|
||||
{ value: 'side', label: '侧边布局' },
|
||||
{ value: 'top', label: '顶部布局' },
|
||||
{ value: 'mixed', label: '混合布局' }
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style src="./LayoutSwitcher.css"></style>
|
||||
@@ -0,0 +1,37 @@
|
||||
<template>
|
||||
<div class="aa-layoutsw">
|
||||
<div
|
||||
v-for="o in options"
|
||||
:key="o.value"
|
||||
class="aa-layoutsw-opt"
|
||||
:class="{ 'is-active': modelValue === o.value }"
|
||||
@click="emit('update:modelValue', o.value)"
|
||||
>
|
||||
<div class="aa-layoutsw-mini">
|
||||
<div v-if="o.value !== 'side'" class="s-top"></div>
|
||||
<div class="s-body">
|
||||
<div v-if="o.value !== 'top'" class="s-side"></div>
|
||||
<div class="s-main"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="aa-layoutsw-label">{{ o.label }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
defineProps({
|
||||
modelValue: { type: String, default: 'side' },
|
||||
options: {
|
||||
type: Array,
|
||||
default: () => [
|
||||
{ value: 'side', label: '侧边布局' },
|
||||
{ value: 'top', label: '顶部布局' },
|
||||
{ value: 'mixed', label: '混合布局' }
|
||||
]
|
||||
}
|
||||
});
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
</script>
|
||||
|
||||
<style src="./LayoutSwitcher.css"></style>
|
||||
Reference in New Issue
Block a user