|
|
@ -32,7 +32,7 @@ |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="form-group"> |
|
|
<div class="form-group"> |
|
|
<label>字体名称:</label> |
|
|
<label>字体名称</label> |
|
|
<select v-model="nodeFontFamily"> |
|
|
<select v-model="nodeFontFamily"> |
|
|
<option value="Microsoft YaHei, sans-serif">微软雅黑</option> |
|
|
<option value="Microsoft YaHei, sans-serif">微软雅黑</option> |
|
|
<option value="SimSun, serif">宋体(SimSun)</option> |
|
|
<option value="SimSun, serif">宋体(SimSun)</option> |
|
|
@ -42,7 +42,7 @@ |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="form-group"> |
|
|
<div class="form-group"> |
|
|
<label>字体大小:</label> |
|
|
<label>字体大小</label> |
|
|
<div class="slider-wrapper"> |
|
|
<div class="slider-wrapper"> |
|
|
<input v-model.number="nodeFontSize" type="range" min="10" max="24" step="1" class="theme-slider"/> |
|
|
<input v-model.number="nodeFontSize" type="range" min="10" max="24" step="1" class="theme-slider"/> |
|
|
<span class="val-text-black">{{ nodeFontSize }}px</span> |
|
|
<span class="val-text-black">{{ nodeFontSize }}px</span> |
|
|
@ -50,14 +50,14 @@ |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="color-picker-item"> |
|
|
<div class="color-picker-item"> |
|
|
<label>字体颜色:</label> |
|
|
<label>字体颜色</label> |
|
|
<div class="color-picker-border"> |
|
|
<div class="color-picker-border"> |
|
|
<input v-model="nodeFontColor" type="color" class="square-picker"/> |
|
|
<input v-model="nodeFontColor" type="color" class="square-picker"/> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="form-group"> |
|
|
<div class="form-group"> |
|
|
<label>图形:</label> |
|
|
<label>图形</label> |
|
|
<select v-model="nodeShape"> |
|
|
<select v-model="nodeShape"> |
|
|
<option value="circle">圆形</option> |
|
|
<option value="circle">圆形</option> |
|
|
<option value="diamond">菱形</option> |
|
|
<option value="diamond">菱形</option> |
|
|
@ -67,7 +67,7 @@ |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="form-group"> |
|
|
<div class="form-group"> |
|
|
<label>尺寸:</label> |
|
|
<label>尺寸</label> |
|
|
<input |
|
|
<input |
|
|
:value="nodeSize" |
|
|
:value="nodeSize" |
|
|
type="number" |
|
|
type="number" |
|
|
@ -78,21 +78,21 @@ |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="color-picker-item"> |
|
|
<div class="color-picker-item"> |
|
|
<label>填充颜色:</label> |
|
|
<label>填充颜色</label> |
|
|
<div class="color-picker-border"> |
|
|
<div class="color-picker-border"> |
|
|
<input v-model="nodeFill" type="color" class="square-picker"/> |
|
|
<input v-model="nodeFill" type="color" class="square-picker"/> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="color-picker-item"> |
|
|
<div class="color-picker-item"> |
|
|
<label>边框颜色:</label> |
|
|
<label>边框颜色</label> |
|
|
<div class="color-picker-border"> |
|
|
<div class="color-picker-border"> |
|
|
<input v-model="nodeStroke" type="color" class="square-picker"/> |
|
|
<input v-model="nodeStroke" type="color" class="square-picker"/> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="form-group"> |
|
|
<div class="form-group"> |
|
|
<label>边框尺寸:</label> |
|
|
<label>边框尺寸</label> |
|
|
<input |
|
|
<input |
|
|
:value="nodeLineWidth" |
|
|
:value="nodeLineWidth" |
|
|
type="number" |
|
|
type="number" |
|
|
@ -116,7 +116,7 @@ |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="form-group"> |
|
|
<div class="form-group"> |
|
|
<label>字体名称:</label> |
|
|
<label>字体名称</label> |
|
|
<select v-model="edgeFontFamily"> |
|
|
<select v-model="edgeFontFamily"> |
|
|
<option value="Microsoft YaHei, sans-serif">微软雅黑</option> |
|
|
<option value="Microsoft YaHei, sans-serif">微软雅黑</option> |
|
|
<option value="SimSun, serif">宋体</option> |
|
|
<option value="SimSun, serif">宋体</option> |
|
|
@ -126,7 +126,7 @@ |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="form-group"> |
|
|
<div class="form-group"> |
|
|
<label>字体大小:</label> |
|
|
<label>字体大小</label> |
|
|
<div class="slider-wrapper"> |
|
|
<div class="slider-wrapper"> |
|
|
<input v-model.number="edgeFontSize" type="range" min="8" max="16" step="1" class="theme-slider"/> |
|
|
<input v-model.number="edgeFontSize" type="range" min="8" max="16" step="1" class="theme-slider"/> |
|
|
<span class="val-text-black">{{ edgeFontSize }}px</span> |
|
|
<span class="val-text-black">{{ edgeFontSize }}px</span> |
|
|
@ -134,14 +134,14 @@ |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="color-picker-item"> |
|
|
<div class="color-picker-item"> |
|
|
<label>字体颜色:</label> |
|
|
<label>字体颜色</label> |
|
|
<div class="color-picker-border"> |
|
|
<div class="color-picker-border"> |
|
|
<input v-model="edgeFontColor" type="color" class="square-picker"/> |
|
|
<input v-model="edgeFontColor" type="color" class="square-picker"/> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="form-group"> |
|
|
<div class="form-group"> |
|
|
<label>连边类型:</label> |
|
|
<label>连边类型</label> |
|
|
<select v-model="edgeType"> |
|
|
<select v-model="edgeType"> |
|
|
<option value="line">直线</option> |
|
|
<option value="line">直线</option> |
|
|
<option value="polyline">折线</option> |
|
|
<option value="polyline">折线</option> |
|
|
@ -151,7 +151,7 @@ |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="form-group"> |
|
|
<div class="form-group"> |
|
|
<label>线粗细:</label> |
|
|
<label>线粗细</label> |
|
|
<input |
|
|
<input |
|
|
:value="edgeLineWidth" |
|
|
:value="edgeLineWidth" |
|
|
type="number" |
|
|
type="number" |
|
|
@ -162,7 +162,7 @@ |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="color-picker-item"> |
|
|
<div class="color-picker-item"> |
|
|
<label>线条颜色:</label> |
|
|
<label>线条颜色</label> |
|
|
<div class="color-picker-border"> |
|
|
<div class="color-picker-border"> |
|
|
<input v-model="edgeStroke" type="color" class="square-picker"/> |
|
|
<input v-model="edgeStroke" type="color" class="square-picker"/> |
|
|
</div> |
|
|
</div> |
|
|
@ -304,7 +304,7 @@ import { |
|
|
deleteGraphStyle, |
|
|
deleteGraphStyle, |
|
|
batchDeleteGraphStyle, |
|
|
batchDeleteGraphStyle, |
|
|
deleteGraphStyleGroup, |
|
|
deleteGraphStyleGroup, |
|
|
applyGraphStyleGroup |
|
|
applyGraphStyleGroup, getGraphStyleActive |
|
|
} from '@/api/style'; |
|
|
} from '@/api/style'; |
|
|
import {ElMessageBox, ElMessage} from 'element-plus'; |
|
|
import {ElMessageBox, ElMessage} from 'element-plus'; |
|
|
import {markRaw} from 'vue'; |
|
|
import {markRaw} from 'vue'; |
|
|
@ -684,19 +684,15 @@ export default { |
|
|
this.saveDialogVisible = true; |
|
|
this.saveDialogVisible = true; |
|
|
}, |
|
|
}, |
|
|
async confirmSave() { |
|
|
async confirmSave() { |
|
|
if (!this.saveForm.group_name || !this |
|
|
if (!this.saveForm.group_name || !this.saveForm.group_name.trim()) { |
|
|
.saveForm.group_name.trim()) { |
|
|
return ElMessage.warning("请选择或输入方案名称"); |
|
|
return this.$message.warning("请选择或输入方案名称" |
|
|
|
|
|
); |
|
|
|
|
|
} |
|
|
} |
|
|
if (!this.saveForm.canvas_name || !this |
|
|
if (!this.saveForm.canvas_name || !this.saveForm.canvas_name.trim()) { |
|
|
.saveForm.canvas_name.trim()) { |
|
|
return ElMessage.warning("请输入配置名称"); |
|
|
return this.$message.warning("请输入配置名称" |
|
|
|
|
|
); |
|
|
|
|
|
} |
|
|
} |
|
|
const payload = { |
|
|
const payload = { |
|
|
canvas_name: this.saveForm.canvas_name, |
|
|
canvas_name: this.saveForm.canvas_name.trim(), |
|
|
group_name: this.saveForm.group_name, |
|
|
group_name: this.saveForm.group_name.trim(), |
|
|
current_label: this.activeTags, |
|
|
current_label: this.activeTags, |
|
|
styles: {...this.tagStyles[tagToLabelMap[this.activeTags]]} |
|
|
styles: {...this.tagStyles[tagToLabelMap[this.activeTags]]} |
|
|
}; |
|
|
}; |
|
|
@ -704,6 +700,8 @@ export default { |
|
|
if (res.code === 200) { |
|
|
if (res.code === 200) { |
|
|
ElMessage.success("保存成功"); |
|
|
ElMessage.success("保存成功"); |
|
|
this.saveDialogVisible = false; |
|
|
this.saveDialogVisible = false; |
|
|
|
|
|
this.saveForm.canvas_name = ''; |
|
|
|
|
|
this.saveForm.group_name = ''; |
|
|
this.resetAllTagsToDefault(); |
|
|
this.resetAllTagsToDefault(); |
|
|
this.fetchConfigs(); |
|
|
this.fetchConfigs(); |
|
|
} |
|
|
} |
|
|
@ -725,51 +723,114 @@ export default { |
|
|
this.updateAllElements(); |
|
|
this.updateAllElements(); |
|
|
ElMessage.info(`已重置【${this.activeTags}】样式`); |
|
|
ElMessage.info(`已重置【${this.activeTags}】样式`); |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
// --- 修改点:单个配置删除增加判断 --- |
|
|
async deleteSingleConfig(id) { |
|
|
async deleteSingleConfig(id) { |
|
|
|
|
|
if (this.usingConfigIds.includes(id)) { |
|
|
|
|
|
return ElMessage.error("该配置正在应用中,请取消应用或切换方案后再删除"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
try { |
|
|
try { |
|
|
await ElMessageBox.confirm('确定删除此配置吗?', '提示'); |
|
|
await ElMessageBox.confirm('确定删除此配置吗?', '提示'); |
|
|
const res = await deleteGraphStyle(id); |
|
|
const res = await deleteGraphStyle(id); |
|
|
if (res.code === 200) { |
|
|
if (res.code === 200) { |
|
|
this.usingConfigIds = this.usingConfigIds.filter(cid => cid !== id); |
|
|
ElMessage.success("删除成功"); |
|
|
this.fetchConfigs(); |
|
|
this.fetchConfigs(); |
|
|
this.updateAllElements(); |
|
|
|
|
|
} |
|
|
} |
|
|
} catch (err) {} |
|
|
} catch (err) {} |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
// --- 修改点:方案组删除增加判断 --- |
|
|
async deleteGroup(groupId) { |
|
|
async deleteGroup(groupId) { |
|
|
|
|
|
const group = this.styleGroups.find(g => g.id === groupId); |
|
|
|
|
|
if (!group) return; |
|
|
|
|
|
|
|
|
|
|
|
// 1. 判断是否正在应用 |
|
|
|
|
|
const isGroupUsing = group.configs.some(c => this.usingConfigIds.includes(c.id)); |
|
|
|
|
|
if (isGroupUsing || group.is_active) { |
|
|
|
|
|
return ElMessage.error("该方案中包含正在应用的配置,无法删除"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 2. 判断是否是最后一个方案 |
|
|
|
|
|
if (this.styleGroups.length <= 1) { |
|
|
|
|
|
return ElMessage.error("系统至少需保留一个方案,无法全部删除"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
try { |
|
|
try { |
|
|
await ElMessageBox.confirm('确定删除整个方案吗?', '提示'); |
|
|
await ElMessageBox.confirm('确定删除整个方案吗?', '提示'); |
|
|
const res = await deleteGraphStyleGroup(groupId); |
|
|
const res = await deleteGraphStyleGroup(groupId); |
|
|
if (res.code === 200) { |
|
|
if (res.code === 200) { |
|
|
|
|
|
ElMessage.success("方案已删除"); |
|
|
this.fetchConfigs(); |
|
|
this.fetchConfigs(); |
|
|
this.updateAllElements(); |
|
|
|
|
|
} |
|
|
} |
|
|
} catch (err) {} |
|
|
} catch (err) {} |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
// --- 修改点:批量删除增加核心判断逻辑 --- |
|
|
async handleUnifiedBatchDelete() { |
|
|
async handleUnifiedBatchDelete() { |
|
|
|
|
|
// 1. 基础判断 |
|
|
|
|
|
if (this.checkedConfigIds.length === 0 && this.checkedGroupIds.length === 0) { |
|
|
|
|
|
return ElMessage.warning("请先勾选要删除的项目"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 2. 正在应用状态判断 |
|
|
|
|
|
const isAnyCheckedConfigUsing = this.checkedConfigIds.some(id => this.usingConfigIds.includes(id)); |
|
|
|
|
|
const isAnyCheckedGroupUsing = this.styleGroups |
|
|
|
|
|
.filter(g => this.checkedGroupIds.includes(g.id)) |
|
|
|
|
|
.some(g => g.configs.some(c => this.usingConfigIds.includes(c.id))); |
|
|
|
|
|
|
|
|
|
|
|
if (isAnyCheckedConfigUsing || isAnyCheckedGroupUsing) { |
|
|
|
|
|
return ElMessageBox.alert( |
|
|
|
|
|
'选中的项目中包含“正在应用”的配置,请先取消应用后再执行删除操作。', |
|
|
|
|
|
'无法执行删除', |
|
|
|
|
|
{ type: 'error', confirmButtonText: '我知道了' } |
|
|
|
|
|
); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 3. 最小保留数判断 (针对方案组) |
|
|
|
|
|
if (this.checkedGroupIds.length >= this.styleGroups.length && this.styleGroups.length > 0) { |
|
|
|
|
|
return ElMessage.error("系统至少需要保留一个方案,请勿全部勾选删除"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
try { |
|
|
try { |
|
|
await ElMessageBox.confirm( |
|
|
await ElMessageBox.confirm( |
|
|
'确定执行批量删除吗?', |
|
|
'确定执行批量删除吗?此操作不可恢复。', |
|
|
'批量删除', |
|
|
'批量删除确认', |
|
|
{ |
|
|
{ |
|
|
confirmButtonText: '确定', |
|
|
confirmButtonText: '确定删除', |
|
|
cancelButtonText: '取消', |
|
|
cancelButtonText: '取消', |
|
|
type: 'warning' |
|
|
type: 'warning' |
|
|
} |
|
|
} |
|
|
); |
|
|
); |
|
|
for (const gid of this.checkedGroupIds) await deleteGraphStyleGroup(gid); |
|
|
|
|
|
if (this.checkedConfigIds.length > 0) await batchDeleteGraphStyle({ids: this.checkedConfigIds}); |
|
|
// 执行删除 |
|
|
|
|
|
if (this.checkedGroupIds.length > 0) { |
|
|
|
|
|
for (const gid of this.checkedGroupIds) { |
|
|
|
|
|
await deleteGraphStyleGroup(gid); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (this.checkedConfigIds.length > 0) { |
|
|
|
|
|
await batchDeleteGraphStyle({ids: this.checkedConfigIds}); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
ElMessage.success("批量删除成功"); |
|
|
this.clearSelection(); |
|
|
this.clearSelection(); |
|
|
this.fetchConfigs(); |
|
|
this.fetchConfigs(); |
|
|
this.updateAllElements(); |
|
|
this.updateAllElements(); |
|
|
} catch (e) {} |
|
|
} catch (e) { |
|
|
|
|
|
console.log("用户取消或删除失败", e); |
|
|
|
|
|
} |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
clearSelection() { |
|
|
clearSelection() { |
|
|
this.checkedConfigIds = []; |
|
|
this.checkedConfigIds = []; |
|
|
this.checkedGroupIds = []; |
|
|
this.checkedGroupIds = []; |
|
|
}, |
|
|
}, |
|
|
handleResize() { |
|
|
handleResize() { |
|
|
if (this._graph && this.$refs.graphContainer) this._graph.setSize(this.$refs.graphContainer.clientWidth, this.$refs.graphContainer.clientHeight); |
|
|
if (this._graph && this.$refs.graphContainer) { |
|
|
|
|
|
this._graph.setSize(this.$refs.graphContainer.clientWidth, this.$refs.graphContainer.clientHeight); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
@ -821,7 +882,7 @@ export default { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.control-panel { |
|
|
.control-panel { |
|
|
width: 260px; |
|
|
width: 250px; |
|
|
background: #ffffff; |
|
|
background: #ffffff; |
|
|
box-shadow: 4px 0 12px rgba(0, 0, 0, 0.08); |
|
|
box-shadow: 4px 0 12px rgba(0, 0, 0, 0.08); |
|
|
padding: 10px; |
|
|
padding: 10px; |
|
|
@ -833,7 +894,7 @@ export default { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.config-list-panel { |
|
|
.config-list-panel { |
|
|
width: 320px; |
|
|
width: 250px; |
|
|
background: #ffffff; |
|
|
background: #ffffff; |
|
|
box-shadow: -4px 0 12px rgba(0, 0, 0, 0.08); |
|
|
box-shadow: -4px 0 12px rgba(0, 0, 0, 0.08); |
|
|
padding: 18px; |
|
|
padding: 18px; |
|
|
@ -845,14 +906,15 @@ export default { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.panel-header-container { |
|
|
.panel-header-container { |
|
|
margin-bottom: 15px; |
|
|
margin-bottom: 10px; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.panel-header { |
|
|
.panel-header { |
|
|
display: flex; |
|
|
display: flex; |
|
|
justify-content: space-between; |
|
|
justify-content: space-between; |
|
|
align-items: center; |
|
|
align-items: center; |
|
|
margin-bottom: 8px; |
|
|
padding-bottom: 10px; |
|
|
|
|
|
border-bottom: 1px solid #E2E6F3; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/*.header-line { |
|
|
/*.header-line { |
|
|
@ -878,7 +940,7 @@ export default { |
|
|
|
|
|
|
|
|
.tag-pill { |
|
|
.tag-pill { |
|
|
flex-shrink: 0; |
|
|
flex-shrink: 0; |
|
|
padding: 0 10px; |
|
|
padding: 1px 10px; |
|
|
border-radius: 20px; |
|
|
border-radius: 20px; |
|
|
font-size: 12px; |
|
|
font-size: 12px; |
|
|
font-weight: bold; |
|
|
font-weight: bold; |
|
|
@ -897,14 +959,11 @@ export default { |
|
|
background-color: #4a68db; |
|
|
background-color: #4a68db; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.section { |
|
|
|
|
|
margin-bottom: 25px; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
.section-title { |
|
|
.section-title { |
|
|
display: flex; |
|
|
display: flex; |
|
|
align-items: center; |
|
|
align-items: center; |
|
|
font-size: 16px; |
|
|
font-size: 14px; |
|
|
font-weight: bold; |
|
|
font-weight: bold; |
|
|
color: #334155; |
|
|
color: #334155; |
|
|
margin-bottom: 12px; |
|
|
margin-bottom: 12px; |
|
|
@ -918,7 +977,7 @@ export default { |
|
|
position: absolute; |
|
|
position: absolute; |
|
|
left: 0; |
|
|
left: 0; |
|
|
width: 4px; |
|
|
width: 4px; |
|
|
height: 16px; |
|
|
height: 15px; |
|
|
background-color: #1559f3; |
|
|
background-color: #1559f3; |
|
|
border-radius: 2px; |
|
|
border-radius: 2px; |
|
|
} |
|
|
} |
|
|
@ -927,15 +986,16 @@ export default { |
|
|
display: flex; |
|
|
display: flex; |
|
|
align-items: center; |
|
|
align-items: center; |
|
|
justify-content: flex-start; |
|
|
justify-content: flex-start; |
|
|
font-size: 14px; |
|
|
font-size: 13px; |
|
|
margin-bottom: 12px; |
|
|
margin-bottom: 10px; |
|
|
color: #475569; |
|
|
color: #475569; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.checkbox-label { |
|
|
.checkbox-label { |
|
|
width: 150px; |
|
|
width: 80px; |
|
|
flex-shrink: 0; |
|
|
flex-shrink: 0; |
|
|
text-align: left; |
|
|
text-align: left; |
|
|
|
|
|
margin-right: 8px; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.theme-checkbox { |
|
|
.theme-checkbox { |
|
|
@ -948,13 +1008,15 @@ export default { |
|
|
.form-group, .color-picker-item { |
|
|
.form-group, .color-picker-item { |
|
|
display: flex; |
|
|
display: flex; |
|
|
align-items: center; |
|
|
align-items: center; |
|
|
margin-bottom: 12px; |
|
|
margin-bottom: 10px; |
|
|
font-size: 14px; |
|
|
font-size: 13px; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.form-group label, .color-picker-item label { |
|
|
.form-group label, .color-picker-item label { |
|
|
width: 80px; |
|
|
width: 80px; |
|
|
flex-shrink: 0; |
|
|
flex-shrink: 0; |
|
|
|
|
|
text-align: right; |
|
|
|
|
|
margin-right: 8px; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.form-group select, .form-group input[type="number"] { |
|
|
.form-group select, .form-group input[type="number"] { |
|
|
@ -962,6 +1024,7 @@ export default { |
|
|
padding: 5px; |
|
|
padding: 5px; |
|
|
border: 1px solid #e2e8f0; |
|
|
border: 1px solid #e2e8f0; |
|
|
border-radius: 4px; |
|
|
border-radius: 4px; |
|
|
|
|
|
width: 100px; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.slider-wrapper { |
|
|
.slider-wrapper { |
|
|
@ -1014,9 +1077,6 @@ export default { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.button-footer { |
|
|
.button-footer { |
|
|
display: flex; |
|
|
|
|
|
gap: 10px; |
|
|
|
|
|
padding-top: 10px; |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.btn-confirm-save { |
|
|
.btn-confirm-save { |
|
|
@ -1024,10 +1084,12 @@ export default { |
|
|
color: #fff; |
|
|
color: #fff; |
|
|
border: none; |
|
|
border: none; |
|
|
flex: 1; |
|
|
flex: 1; |
|
|
padding: 10px; |
|
|
padding: 5px 14px; |
|
|
border-radius: 4px; |
|
|
border-radius: 4px; |
|
|
cursor: pointer; |
|
|
cursor: pointer; |
|
|
font-weight: bold; |
|
|
width: 100px; |
|
|
|
|
|
font-size: 12px; |
|
|
|
|
|
margin-right: 15px; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.btn-reset-style { |
|
|
.btn-reset-style { |
|
|
@ -1035,9 +1097,11 @@ export default { |
|
|
color: #1559f3; |
|
|
color: #1559f3; |
|
|
border: 1px solid #1559f3; |
|
|
border: 1px solid #1559f3; |
|
|
flex: 1; |
|
|
flex: 1; |
|
|
padding: 10px; |
|
|
padding: 5px 14px; |
|
|
border-radius: 4px; |
|
|
border-radius: 4px; |
|
|
cursor: pointer; |
|
|
cursor: pointer; |
|
|
|
|
|
width: 100px; |
|
|
|
|
|
font-size: 12px; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.graph-container { |
|
|
.graph-container { |
|
|
@ -1081,11 +1145,10 @@ export default { |
|
|
|
|
|
|
|
|
.card-using { |
|
|
.card-using { |
|
|
background-color: #eff6ff !important; |
|
|
background-color: #eff6ff !important; |
|
|
outline: 1.5px solid #1559f3; |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
.card-checked { |
|
|
.card-checked { |
|
|
border-left: 4px solid #ef4444 !important; |
|
|
border-left: 4px solid rgb(239, 68, 68) !important; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|