Skip to content
Commits on Source (2)
frontend/inversment-diary/unpackage/dist/*
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
console.log('App Show') console.log('App Show')
}, },
onHide: function() { onHide: function() {
console.log('App Hide') console.log('App Hide');
} }
} }
</script> </script>
......
.container {
min-height: 100vh;
background: #f5f7fa;
padding-bottom: 120rpx;
}
/* 日期选择器 */
.date-header {
background: white;
padding: 20rpx 30rpx;
border-bottom: 1rpx solid #f0f0f0;
position: sticky;
top: 0;
z-index: 99;
display: flex;
justify-content: space-between;
align-items: center;
}
.date-selector {
display: flex;
align-items: center;
padding: 15rpx 0;
}
.edit-toggle {
padding: 15rpx 25rpx;
background: #007aff;
border-radius: 25rpx;
cursor: pointer;
transition: background-color 0.2s;
}
.edit-toggle:hover {
background: #0056b3;
}
.edit-toggle-text {
color: white;
font-size: 28rpx;
font-weight: 500;
}
.date-text {
color: #333;
font-size: 32rpx;
font-weight: bold;
margin-right: 15rpx;
}
.calendar-icon {
font-size: 28rpx;
color: #007aff;
}
/* 自定义日历 */
.calendar-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
display: flex;
align-items: center;
justify-content: center;
z-index: 1000;
}
.calendar-popup {
background: white;
width: 90%;
max-width: 600rpx;
border-radius: 20rpx;
padding: 30rpx;
box-shadow: 0 10rpx 30rpx rgba(0, 0, 0, 0.3);
}
.calendar-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 30rpx;
padding-bottom: 20rpx;
border-bottom: 1rpx solid #f0f0f0;
}
.calendar-title {
font-size: 36rpx;
font-weight: bold;
color: #333;
}
.calendar-nav {
display: flex;
gap: 30rpx;
}
.nav-btn {
width: 60rpx;
height: 60rpx;
background: #f5f5f5;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 24rpx;
color: #666;
}
.calendar-weekdays {
display: grid;
grid-template-columns: repeat(7, 1fr);
gap: 10rpx;
margin-bottom: 20rpx;
}
.weekday {
text-align: center;
color: #999;
font-size: 24rpx;
padding: 15rpx 0;
}
.calendar-days {
display: flex;
flex-direction: column;
gap: 5rpx;
}
.calendar-row {
display: grid;
grid-template-columns: repeat(7, 1fr);
gap: 5rpx;
}
.calendar-day {
aspect-ratio: 1;
display: flex;
align-items: center;
justify-content: center;
border-radius: 8rpx;
cursor: pointer;
transition: all 0.2s;
}
.calendar-day.other-month {
opacity: 0.3;
}
.calendar-day.selected {
background: #007aff;
color: white;
}
.calendar-day.today {
background: #e8f4ff;
color: #007aff;
font-weight: bold;
}
.calendar-day.selected.today {
background: #007aff;
color: white;
}
.day-number {
font-size: 28rpx;
}
/* 可编辑字段样式 */
.editable-field {
display: flex;
align-items: center;
cursor: pointer;
padding: 4rpx 8rpx;
border-radius: 6rpx;
transition: background-color 0.2s;
position: relative;
}
.editable-field:hover {
background-color: rgba(0, 122, 255, 0.1);
}
.edit-icon {
font-size: 20rpx;
margin-left: 8rpx;
opacity: 0.6;
transition: opacity 0.2s;
}
.editable-field:hover .edit-icon {
opacity: 1;
}
/* 账户概览 */
.account-overview {
background: white;
margin: 20rpx;
border-radius: 16rpx;
padding: 30rpx;
box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1);
}
.balance-section {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 30rpx;
}
.balance-left {
flex: 1;
}
.balance-label {
display: block;
color: #666;
font-size: 28rpx;
margin-bottom: 10rpx;
}
.balance-amount {
display: block;
color: #333;
font-size: 48rpx;
font-weight: bold;
}
.balance-input {
max-width: 300rpx;
font-size: 48rpx;
font-weight: bold;
color: #333;
border: 2rpx solid #007aff;
border-radius: 12rpx;
padding: 15rpx 20rpx;
background: #f8f9fa;
box-shadow: 0 2rpx 8rpx rgba(0, 122, 255, 0.1);
}
.profit-input {
max-width: 200rpx;
font-size: 28rpx;
font-weight: bold;
color: #333;
border: 2rpx solid #007aff;
border-radius: 10rpx;
padding: 12rpx 16rpx;
background: #f8f9fa;
text-align: center;
box-shadow: 0 2rpx 8rpx rgba(0, 122, 255, 0.1);
}
.profit-input-wrapper {
margin-top: 8rpx;
display: flex;
justify-content: center;
}
.balance-right {
text-align: center;
}
.asset-label {
display: block;
color: #666;
font-size: 24rpx;
margin-bottom: 10rpx;
}
.progress-circle {
width: 80rpx;
height: 80rpx;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
position: relative;
}
/* 不同仓位等级的颜色 - 这些样式已由动态样式替代,可以保留作为备用 */
.progress-circle.position-safe {
/* background: conic-gradient(#00d4aa 0deg 306deg, #e6f7ff 306deg 360deg); */
}
.progress-circle.position-medium {
/* background: conic-gradient(#ffa502 0deg 306deg, #e6f7ff 306deg 360deg); */
}
.progress-circle.position-high {
/* background: conic-gradient(#ff4757 0deg 306deg, #e6f7ff 306deg 360deg); */
}
.progress-circle::after {
content: '';
width: 60rpx;
height: 60rpx;
background: white;
border-radius: 50%;
position: absolute;
}
.progress-text {
font-size: 24rpx;
font-weight: bold;
z-index: 1;
}
/* 不同仓位等级的文字颜色 */
.position-safe .progress-text {
color: #00d4aa;
}
.position-medium .progress-text {
color: #ffa502;
}
.position-high .progress-text {
color: #ff4757;
}
.profit-section {
display: flex;
justify-content: space-between;
}
.profit-item {
text-align: center;
}
.profit-label {
display: block;
color: #666;
font-size: 24rpx;
margin-bottom: 8rpx;
}
.profit-value {
display: block;
font-size: 28rpx;
font-weight: bold;
}
.profit-value.positive {
color: #ff4757;
}
.profit-value.negative {
color: #00d4aa;
}
/* 持仓 */
.holdings-section {
margin: 20rpx;
}
.section-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20rpx;
}
.section-title {
display: block;
color: #333;
font-size: 32rpx;
font-weight: bold;
}
.add-holding-btn {
display: flex;
align-items: center;
gap: 8rpx;
padding: 8rpx 15rpx;
background: #007aff;
border-radius: 20rpx;
color: white;
font-size: 24rpx;
font-weight: 500;
cursor: pointer;
transition: background-color 0.2s;
}
.add-holding-btn:hover {
background: #0056b3;
}
.add-icon {
font-size: 28rpx;
}
.add-text {
font-size: 28rpx;
}
.holdings-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 20rpx;
}
.holding-card {
background: white;
border-radius: 16rpx;
padding: 25rpx;
box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1);
position: relative;
}
.card-deleted {
opacity: 0.5;
pointer-events: none;
background: #f5f5f5;
border: 2rpx dashed #ccc;
}
.card-deleted .stock-name,
.card-deleted .amount-value,
.card-deleted .price-value {
color: #999;
text-decoration: line-through;
}
.card-deleted .delete-btn {
background: #00d4aa;
pointer-events: auto;
}
.delete-btn {
position: absolute;
top: 15rpx;
right: 15rpx;
background: #ff4757;
border-radius: 50%;
width: 50rpx;
height: 50rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 30rpx;
color: white;
z-index: 1;
cursor: pointer;
transition: background-color 0.2s;
}
.delete-btn:hover {
background: #e03e4e;
}
.delete-icon {
font-size: 30rpx;
}
.holding-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 20rpx;
}
.stock-name-wrapper {
display: flex;
align-items: center;
}
.stock-name {
color: #333;
font-size: 30rpx;
font-weight: bold;
margin-right: 8rpx;
}
.lock-icon {
font-size: 20rpx;
color: #999;
}
.stock-name-input {
max-width: 200rpx;
font-size: 30rpx;
font-weight: bold;
color: #333;
border: 2rpx solid #007aff;
border-radius: 10rpx;
padding: 12rpx 16rpx;
background: #f8f9fa;
text-align: center;
box-shadow: 0 2rpx 8rpx rgba(0, 122, 255, 0.1);
}
.position-percentage {
font-size: 22rpx;
color: #007aff;
background: #e8f4ff;
padding: 4rpx 10rpx;
border-radius: 6rpx;
}
.stock-change {
font-size: 22rpx;
padding: 4rpx 10rpx;
border-radius: 6rpx;
}
.stock-change.positive {
color: #ff4757;
background: #fff1f0;
}
.stock-change.negative {
color: #00d4aa;
background: #f0fff4;
}
.change-input {
max-width: 100rpx;
font-size: 24rpx;
color: #333;
padding: 12rpx 16rpx;
border-radius: 8rpx;
border: 2rpx solid #007aff;
background: #f8f9fa;
text-align: right;
font-weight: 500;
box-shadow: 0 1rpx 6rpx rgba(0, 122, 255, 0.1);
transition: all 0.2s;
}
.stock-price {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 25rpx;
}
.price-value {
font-size: 40rpx;
font-weight: bold;
color: #333;
}
.price-input {
max-width: 100rpx;
font-size: 40rpx;
font-weight: bold;
color: #333;
border: 2rpx solid #007aff;
border-radius: 10rpx;
padding: 12rpx 16rpx;
background: #f8f9fa;
text-align: right;
box-shadow: 0 2rpx 8rpx rgba(0, 122, 255, 0.1);
}
.holding-amounts {
margin-bottom: 25rpx;
}
.amount-labels {
display: flex;
justify-content: space-between;
margin-bottom: 8rpx;
}
.amount-label {
color: #666;
font-size: 22rpx;
}
.amount-row {
display: flex;
justify-content: space-between;
margin-bottom: 8rpx;
}
.amount-field {
flex: 1;
margin-right: 10rpx;
display: flex;
justify-content: center;
align-items: center;
}
.amount-field:last-child {
margin-right: 0;
}
.amount-value {
color: #333;
font-weight: bold;
font-size: 24rpx;
cursor: pointer;
padding: 2rpx 4rpx;
border-radius: 4rpx;
transition: background-color 0.2s;
}
.amount-value:hover {
background-color: #f0f0f0;
}
.amount-value.profit {
color: #ff4757;
}
.amount-value.loss {
color: #00d4aa;
}
.amount-input {
max-width: 150rpx;
font-size: 24rpx;
color: #333;
padding: 12rpx 16rpx;
border-radius: 8rpx;
border: 2rpx solid #007aff;
background: #f8f9fa;
text-align: right;
font-weight: 500;
box-shadow: 0 1rpx 6rpx rgba(0, 122, 255, 0.1);
transition: all 0.2s;
}
/* 今日操作 */
.operations-section {
margin: 20rpx;
}
.operations-list {
background: white;
border-radius: 16rpx;
overflow: hidden;
box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1);
}
.operation-group {
border-bottom: 1rpx solid #f5f5f5;
padding: 30rpx;
}
.operation-group:last-child {
border-bottom: none;
}
.operation-stock-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 20rpx;
gap: 15rpx;
}
.operation-stock {
color: #333;
font-size: 28rpx;
font-weight: bold;
flex-shrink: 0;
}
.current-price {
font-size: 26rpx;
font-weight: bold;
flex-shrink: 0;
}
.current-price.positive {
color: #ff4757;
}
.current-price.negative {
color: #00d4aa;
}
.price-change {
font-size: 22rpx;
padding: 2rpx 8rpx;
border-radius: 4rpx;
font-weight: 500;
flex-shrink: 0;
}
.price-change.positive {
color: #ff4757;
background: #fff1f0;
}
.price-change.negative {
color: #00d4aa;
background: #f0fff4;
}
.holder-count {
font-size: 20rpx;
color: #007aff;
background: #e8f4ff;
padding: 4rpx 8rpx;
border-radius: 6rpx;
font-weight: 500;
flex-shrink: 0;
}
.operations-list-continuous {
margin-bottom: 20rpx;
}
.operations-list-continuous .operation-item {
margin-bottom: 10rpx;
padding: 15rpx;
background: #f8f9fa;
border-radius: 8rpx;
}
.operations-list-continuous .operation-item:last-child {
margin-bottom: 0;
}
.operation-notes {
margin-top: 15rpx;
}
.reasons-section,
.analyses-section {
margin-bottom: 20rpx;
}
.reasons-section:last-child,
.analyses-section:last-child {
margin-bottom: 0;
}
.section-subtitle {
display: block;
font-size: 26rpx;
font-weight: bold;
color: #333;
margin-bottom: 15rpx;
}
.reason-item,
.analysis-item {
background: #fffbeb;
padding: 20rpx;
border-radius: 8rpx;
margin-bottom: 10rpx;
border-left: 4rpx solid #d97706;
}
.analysis-item {
background: #f0f9ff;
border-left: 4rpx solid #0369a1;
}
.reason-item:last-child,
.analysis-item:last-child {
margin-bottom: 0;
}
.reason-content,
.analysis-content {
display: block;
font-size: 24rpx;
line-height: 1.6;
margin-bottom: 8rpx;
}
.reason-content {
color: #d97706;
}
.analysis-content {
color: #0369a1;
}
.reason-date,
.analysis-date {
display: block;
font-size: 20rpx;
color: #999;
text-align: right;
}
.operation-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10rpx;
}
.operation-type {
display: flex;
align-items: center;
padding: 8rpx 16rpx;
border-radius: 8rpx;
gap: 8rpx;
}
.operation-type.buy {
background: #fff1f0;
color: #ff4757;
}
.operation-type.sell {
background: #f0fff4;
color: #00d4aa;
}
.type-icon {
font-size: 20rpx;
}
.type-text {
font-size: 24rpx;
}
.operation-details {
color: #666;
font-size: 24rpx;
}
/* 悬浮按钮 */
.floating-button {
position: fixed;
right: 30rpx;
bottom: 160rpx;
width: 100rpx;
height: 100rpx;
background: #007aff;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4rpx 12rpx rgba(0, 122, 255, 0.4);
z-index: 100;
}
.float-icon {
color: white;
font-size: 48rpx;
font-weight: 300;
}
/* 底部按钮 */
.bottom-button {
position: fixed;
bottom: 30rpx;
left: 30rpx;
right: 30rpx;
height: 80rpx;
background: #007aff;
border-radius: 40rpx;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4rpx 12rpx rgba(0, 122, 255, 0.4);
z-index: 100;
}
.bottom-text {
color: white;
font-size: 32rpx;
font-weight: 500;
}
/* 编辑模式按钮 */
.edit-buttons {
position: fixed;
bottom: 160rpx;
/* 调整位置,使其在悬浮按钮下方 */
left: 30rpx;
right: 30rpx;
display: flex;
justify-content: space-around;
z-index: 100;
}
.edit-button {
flex: 1;
margin: 0 10rpx;
height: 80rpx;
border-radius: 40rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
font-weight: 500;
cursor: pointer;
transition: background-color 0.2s;
}
.edit-button.cancel {
background-color: #f0f0f0;
color: #333;
}
.edit-button.submit {
background-color: #007aff;
color: white;
}
.edit-button.cancel:hover {
background-color: #e0e0e0;
}
.edit-button.submit:hover {
background-color: #0056b3;
}
.edit-button-text {
font-size: 32rpx;
}
\ No newline at end of file
...@@ -985,918 +985,4 @@ ...@@ -985,918 +985,4 @@
} }
</script> </script>
<style scoped> <style src="./index.css"></style>
.container { \ No newline at end of file
min-height: 100vh;
background: #f5f7fa;
padding-bottom: 120rpx;
}
/* 日期选择器 */
.date-header {
background: white;
padding: 20rpx 30rpx;
border-bottom: 1rpx solid #f0f0f0;
position: sticky;
top: 0;
z-index: 99;
display: flex;
justify-content: space-between;
align-items: center;
}
.date-selector {
display: flex;
align-items: center;
padding: 15rpx 0;
}
.edit-toggle {
padding: 15rpx 25rpx;
background: #007aff;
border-radius: 25rpx;
cursor: pointer;
transition: background-color 0.2s;
}
.edit-toggle:hover {
background: #0056b3;
}
.edit-toggle-text {
color: white;
font-size: 28rpx;
font-weight: 500;
}
.date-text {
color: #333;
font-size: 32rpx;
font-weight: bold;
margin-right: 15rpx;
}
.calendar-icon {
font-size: 28rpx;
color: #007aff;
}
/* 自定义日历 */
.calendar-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
display: flex;
align-items: center;
justify-content: center;
z-index: 1000;
}
.calendar-popup {
background: white;
width: 90%;
max-width: 600rpx;
border-radius: 20rpx;
padding: 30rpx;
box-shadow: 0 10rpx 30rpx rgba(0, 0, 0, 0.3);
}
.calendar-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 30rpx;
padding-bottom: 20rpx;
border-bottom: 1rpx solid #f0f0f0;
}
.calendar-title {
font-size: 36rpx;
font-weight: bold;
color: #333;
}
.calendar-nav {
display: flex;
gap: 30rpx;
}
.nav-btn {
width: 60rpx;
height: 60rpx;
background: #f5f5f5;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 24rpx;
color: #666;
}
.calendar-weekdays {
display: grid;
grid-template-columns: repeat(7, 1fr);
gap: 10rpx;
margin-bottom: 20rpx;
}
.weekday {
text-align: center;
color: #999;
font-size: 24rpx;
padding: 15rpx 0;
}
.calendar-days {
display: flex;
flex-direction: column;
gap: 5rpx;
}
.calendar-row {
display: grid;
grid-template-columns: repeat(7, 1fr);
gap: 5rpx;
}
.calendar-day {
aspect-ratio: 1;
display: flex;
align-items: center;
justify-content: center;
border-radius: 8rpx;
cursor: pointer;
transition: all 0.2s;
}
.calendar-day.other-month {
opacity: 0.3;
}
.calendar-day.selected {
background: #007aff;
color: white;
}
.calendar-day.today {
background: #e8f4ff;
color: #007aff;
font-weight: bold;
}
.calendar-day.selected.today {
background: #007aff;
color: white;
}
.day-number {
font-size: 28rpx;
}
/* 可编辑字段样式 */
.editable-field {
display: flex;
align-items: center;
cursor: pointer;
padding: 4rpx 8rpx;
border-radius: 6rpx;
transition: background-color 0.2s;
position: relative;
}
.editable-field:hover {
background-color: rgba(0, 122, 255, 0.1);
}
.edit-icon {
font-size: 20rpx;
margin-left: 8rpx;
opacity: 0.6;
transition: opacity 0.2s;
}
.editable-field:hover .edit-icon {
opacity: 1;
}
/* 账户概览 */
.account-overview {
background: white;
margin: 20rpx;
border-radius: 16rpx;
padding: 30rpx;
box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1);
}
.balance-section {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 30rpx;
}
.balance-left {
flex: 1;
}
.balance-label {
display: block;
color: #666;
font-size: 28rpx;
margin-bottom: 10rpx;
}
.balance-amount {
display: block;
color: #333;
font-size: 48rpx;
font-weight: bold;
}
.balance-input {
max-width: 300rpx;
font-size: 48rpx;
font-weight: bold;
color: #333;
border: 2rpx solid #007aff;
border-radius: 12rpx;
padding: 15rpx 20rpx;
background: #f8f9fa;
box-shadow: 0 2rpx 8rpx rgba(0, 122, 255, 0.1);
}
.profit-input {
max-width: 200rpx;
font-size: 28rpx;
font-weight: bold;
color: #333;
border: 2rpx solid #007aff;
border-radius: 10rpx;
padding: 12rpx 16rpx;
background: #f8f9fa;
text-align: center;
box-shadow: 0 2rpx 8rpx rgba(0, 122, 255, 0.1);
}
.profit-input-wrapper {
margin-top: 8rpx;
display: flex;
justify-content: center;
}
.balance-right {
text-align: center;
}
.asset-label {
display: block;
color: #666;
font-size: 24rpx;
margin-bottom: 10rpx;
}
.progress-circle {
width: 80rpx;
height: 80rpx;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
position: relative;
}
/* 不同仓位等级的颜色 - 这些样式已由动态样式替代,可以保留作为备用 */
.progress-circle.position-safe {
/* background: conic-gradient(#00d4aa 0deg 306deg, #e6f7ff 306deg 360deg); */
}
.progress-circle.position-medium {
/* background: conic-gradient(#ffa502 0deg 306deg, #e6f7ff 306deg 360deg); */
}
.progress-circle.position-high {
/* background: conic-gradient(#ff4757 0deg 306deg, #e6f7ff 306deg 360deg); */
}
.progress-circle::after {
content: '';
width: 60rpx;
height: 60rpx;
background: white;
border-radius: 50%;
position: absolute;
}
.progress-text {
font-size: 24rpx;
font-weight: bold;
z-index: 1;
}
/* 不同仓位等级的文字颜色 */
.position-safe .progress-text {
color: #00d4aa;
}
.position-medium .progress-text {
color: #ffa502;
}
.position-high .progress-text {
color: #ff4757;
}
.profit-section {
display: flex;
justify-content: space-between;
}
.profit-item {
text-align: center;
}
.profit-label {
display: block;
color: #666;
font-size: 24rpx;
margin-bottom: 8rpx;
}
.profit-value {
display: block;
font-size: 28rpx;
font-weight: bold;
}
.profit-value.positive {
color: #ff4757;
}
.profit-value.negative {
color: #00d4aa;
}
/* 持仓 */
.holdings-section {
margin: 20rpx;
}
.section-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20rpx;
}
.section-title {
display: block;
color: #333;
font-size: 32rpx;
font-weight: bold;
}
.add-holding-btn {
display: flex;
align-items: center;
gap: 8rpx;
padding: 8rpx 15rpx;
background: #007aff;
border-radius: 20rpx;
color: white;
font-size: 24rpx;
font-weight: 500;
cursor: pointer;
transition: background-color 0.2s;
}
.add-holding-btn:hover {
background: #0056b3;
}
.add-icon {
font-size: 28rpx;
}
.add-text {
font-size: 28rpx;
}
.holdings-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 20rpx;
}
.holding-card {
background: white;
border-radius: 16rpx;
padding: 25rpx;
box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1);
position: relative;
}
.card-deleted {
opacity: 0.5;
pointer-events: none;
background: #f5f5f5;
border: 2rpx dashed #ccc;
}
.card-deleted .stock-name,
.card-deleted .amount-value,
.card-deleted .price-value {
color: #999;
text-decoration: line-through;
}
.card-deleted .delete-btn {
background: #00d4aa;
pointer-events: auto;
}
.delete-btn {
position: absolute;
top: 15rpx;
right: 15rpx;
background: #ff4757;
border-radius: 50%;
width: 50rpx;
height: 50rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 30rpx;
color: white;
z-index: 1;
cursor: pointer;
transition: background-color 0.2s;
}
.delete-btn:hover {
background: #e03e4e;
}
.delete-icon {
font-size: 30rpx;
}
.holding-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 20rpx;
}
.stock-name-wrapper {
display: flex;
align-items: center;
}
.stock-name {
color: #333;
font-size: 30rpx;
font-weight: bold;
margin-right: 8rpx;
}
.lock-icon {
font-size: 20rpx;
color: #999;
}
.stock-name-input {
max-width: 200rpx;
font-size: 30rpx;
font-weight: bold;
color: #333;
border: 2rpx solid #007aff;
border-radius: 10rpx;
padding: 12rpx 16rpx;
background: #f8f9fa;
text-align: center;
box-shadow: 0 2rpx 8rpx rgba(0, 122, 255, 0.1);
}
.position-percentage {
font-size: 22rpx;
color: #007aff;
background: #e8f4ff;
padding: 4rpx 10rpx;
border-radius: 6rpx;
}
.stock-change {
font-size: 22rpx;
padding: 4rpx 10rpx;
border-radius: 6rpx;
}
.stock-change.positive {
color: #ff4757;
background: #fff1f0;
}
.stock-change.negative {
color: #00d4aa;
background: #f0fff4;
}
.change-input {
max-width: 100rpx;
font-size: 24rpx;
color: #333;
padding: 12rpx 16rpx;
border-radius: 8rpx;
border: 2rpx solid #007aff;
background: #f8f9fa;
text-align: right;
font-weight: 500;
box-shadow: 0 1rpx 6rpx rgba(0, 122, 255, 0.1);
transition: all 0.2s;
}
.stock-price {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 25rpx;
}
.price-value {
font-size: 40rpx;
font-weight: bold;
color: #333;
}
.price-input {
max-width: 100rpx;
font-size: 40rpx;
font-weight: bold;
color: #333;
border: 2rpx solid #007aff;
border-radius: 10rpx;
padding: 12rpx 16rpx;
background: #f8f9fa;
text-align: right;
box-shadow: 0 2rpx 8rpx rgba(0, 122, 255, 0.1);
}
.holding-amounts {
margin-bottom: 25rpx;
}
.amount-labels {
display: flex;
justify-content: space-between;
margin-bottom: 8rpx;
}
.amount-label {
color: #666;
font-size: 22rpx;
}
.amount-row {
display: flex;
justify-content: space-between;
margin-bottom: 8rpx;
}
.amount-field {
flex: 1;
margin-right: 10rpx;
display: flex;
justify-content: center;
align-items: center;
}
.amount-field:last-child {
margin-right: 0;
}
.amount-value {
color: #333;
font-weight: bold;
font-size: 24rpx;
cursor: pointer;
padding: 2rpx 4rpx;
border-radius: 4rpx;
transition: background-color 0.2s;
}
.amount-value:hover {
background-color: #f0f0f0;
}
.amount-value.profit {
color: #ff4757;
}
.amount-value.loss {
color: #00d4aa;
}
.amount-input {
max-width: 150rpx;
font-size: 24rpx;
color: #333;
padding: 12rpx 16rpx;
border-radius: 8rpx;
border: 2rpx solid #007aff;
background: #f8f9fa;
text-align: right;
font-weight: 500;
box-shadow: 0 1rpx 6rpx rgba(0, 122, 255, 0.1);
transition: all 0.2s;
}
/* 今日操作 */
.operations-section {
margin: 20rpx;
}
.operations-list {
background: white;
border-radius: 16rpx;
overflow: hidden;
box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1);
}
.operation-group {
border-bottom: 1rpx solid #f5f5f5;
padding: 30rpx;
}
.operation-group:last-child {
border-bottom: none;
}
.operation-stock-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 20rpx;
gap: 15rpx;
}
.operation-stock {
color: #333;
font-size: 28rpx;
font-weight: bold;
flex-shrink: 0;
}
.current-price {
font-size: 26rpx;
font-weight: bold;
flex-shrink: 0;
}
.current-price.positive {
color: #ff4757;
}
.current-price.negative {
color: #00d4aa;
}
.price-change {
font-size: 22rpx;
padding: 2rpx 8rpx;
border-radius: 4rpx;
font-weight: 500;
flex-shrink: 0;
}
.price-change.positive {
color: #ff4757;
background: #fff1f0;
}
.price-change.negative {
color: #00d4aa;
background: #f0fff4;
}
.holder-count {
font-size: 20rpx;
color: #007aff;
background: #e8f4ff;
padding: 4rpx 8rpx;
border-radius: 6rpx;
font-weight: 500;
flex-shrink: 0;
}
.operations-list-continuous {
margin-bottom: 20rpx;
}
.operations-list-continuous .operation-item {
margin-bottom: 10rpx;
padding: 15rpx;
background: #f8f9fa;
border-radius: 8rpx;
}
.operations-list-continuous .operation-item:last-child {
margin-bottom: 0;
}
.operation-notes {
margin-top: 15rpx;
}
.reasons-section,
.analyses-section {
margin-bottom: 20rpx;
}
.reasons-section:last-child,
.analyses-section:last-child {
margin-bottom: 0;
}
.section-subtitle {
display: block;
font-size: 26rpx;
font-weight: bold;
color: #333;
margin-bottom: 15rpx;
}
.reason-item,
.analysis-item {
background: #fffbeb;
padding: 20rpx;
border-radius: 8rpx;
margin-bottom: 10rpx;
border-left: 4rpx solid #d97706;
}
.analysis-item {
background: #f0f9ff;
border-left: 4rpx solid #0369a1;
}
.reason-item:last-child,
.analysis-item:last-child {
margin-bottom: 0;
}
.reason-content,
.analysis-content {
display: block;
font-size: 24rpx;
line-height: 1.6;
margin-bottom: 8rpx;
}
.reason-content {
color: #d97706;
}
.analysis-content {
color: #0369a1;
}
.reason-date,
.analysis-date {
display: block;
font-size: 20rpx;
color: #999;
text-align: right;
}
.operation-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10rpx;
}
.operation-type {
display: flex;
align-items: center;
padding: 8rpx 16rpx;
border-radius: 8rpx;
gap: 8rpx;
}
.operation-type.buy {
background: #fff1f0;
color: #ff4757;
}
.operation-type.sell {
background: #f0fff4;
color: #00d4aa;
}
.type-icon {
font-size: 20rpx;
}
.type-text {
font-size: 24rpx;
}
.operation-details {
color: #666;
font-size: 24rpx;
}
/* 悬浮按钮 */
.floating-button {
position: fixed;
right: 30rpx;
bottom: 160rpx;
width: 100rpx;
height: 100rpx;
background: #007aff;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4rpx 12rpx rgba(0, 122, 255, 0.4);
z-index: 100;
}
.float-icon {
color: white;
font-size: 48rpx;
font-weight: 300;
}
/* 底部按钮 */
.bottom-button {
position: fixed;
bottom: 30rpx;
left: 30rpx;
right: 30rpx;
height: 80rpx;
background: #007aff;
border-radius: 40rpx;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4rpx 12rpx rgba(0, 122, 255, 0.4);
z-index: 100;
}
.bottom-text {
color: white;
font-size: 32rpx;
font-weight: 500;
}
/* 编辑模式按钮 */
.edit-buttons {
position: fixed;
bottom: 160rpx; /* 调整位置,使其在悬浮按钮下方 */
left: 30rpx;
right: 30rpx;
display: flex;
justify-content: space-around;
z-index: 100;
}
.edit-button {
flex: 1;
margin: 0 10rpx;
height: 80rpx;
border-radius: 40rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
font-weight: 500;
cursor: pointer;
transition: background-color 0.2s;
}
.edit-button.cancel {
background-color: #f0f0f0;
color: #333;
}
.edit-button.submit {
background-color: #007aff;
color: white;
}
.edit-button.cancel:hover {
background-color: #e0e0e0;
}
.edit-button.submit:hover {
background-color: #0056b3;
}
.edit-button-text {
font-size: 32rpx;
}
</style>
{
"description": "项目配置文件",
"packOptions": {
"ignore": []
},
"setting": {
"bundle": false,
"userConfirmedBundleSwitch": false,
"urlCheck": true,
"scopeDataCheck": false,
"coverView": true,
"es6": true,
"postcss": true,
"compileHotReLoad": false,
"lazyloadPlaceholderEnable": false,
"preloadBackgroundData": false,
"minified": true,
"autoAudits": false,
"newFeature": false,
"uglifyFileName": false,
"uploadWithSourceMap": true,
"useIsolateContext": true,
"nodeModules": false,
"enhance": true,
"useMultiFrameRuntime": true,
"useApiHook": true,
"useApiHostProcess": false,
"showShadowRootInWxmlPanel": true,
"packNpmManually": false,
"enableEngineNative": false,
"packNpmRelationList": [],
"minifyWXSS": true,
"showES6CompileOption": false
},
"compileType": "miniprogram",
"libVersion": "3.9.2",
"appid": "wxe4dc01e034807383",
"projectname": "miniprogram-1",
"debugOptions": {
"hidedInDevtools": []
},
"scripts": {},
"staticServerOptions": {
"baseURL": "",
"servePath": ""
},
"isGameTourist": false,
"condition": {
"search": {
"list": []
},
"conversation": {
"list": []
},
"game": {
"list": []
},
"plugin": {
"list": []
},
"gamePlugin": {
"list": []
},
"miniprogram": {
"list": []
}
}
}
\ No newline at end of file
{"version":3,"file":"app.js","sources":["App.vue","main.js"],"sourcesContent":["<script>\r\n\texport default {\r\n\t\tonLaunch: function() {\r\n\t\t\tconsole.log('App Launch')\r\n\t\t},\r\n\t\tonShow: function() {\r\n\t\t\tconsole.log('App Show')\r\n\t\t},\r\n\t\tonHide: function() {\r\n\t\t\tconsole.log('App Hide')\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<style>\r\n\t/*每个页面公共css */\r\n</style>\n","import App from './App'\n\n// #ifndef VUE3\nimport Vue from 'vue'\nimport './uni.promisify.adaptor'\nVue.config.productionTip = false\nApp.mpType = 'app'\nconst app = new Vue({\n ...App\n})\napp.$mount()\n// #endif\n\n// #ifdef VUE3\nimport { createSSRApp } from 'vue'\nexport function createApp() {\n const app = createSSRApp(App)\n return {\n app\n }\n}\n// #endif"],"names":["uni","createSSRApp","App"],"mappings":";;;;;;AACC,MAAK,YAAU;AAAA,EACd,UAAU,WAAW;AACpBA,kBAAAA,MAAA,MAAA,OAAA,gBAAY,YAAY;AAAA,EACxB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,gBAAA,UAAU;AAAA,EACtB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,iBAAA,UAAU;AAAA,EACvB;AACD;ACIM,SAAS,YAAY;AAC1B,QAAM,MAAMC,cAAY,aAACC,SAAG;AAC5B,SAAO;AAAA,IACL;AAAA,EACD;AACH;;;"}
\ No newline at end of file
{"version":3,"file":"assets.js","sources":["static/logo.png"],"sourcesContent":["export default \"__VITE_ASSET__46719607__\""],"names":[],"mappings":";AAAA,MAAe,aAAA;;"}
\ No newline at end of file
"use strict";
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const common_vendor = require("./common/vendor.js");
if (!Math) {
"./pages/index/index.js";
}
const _sfc_main = {
onLaunch: function() {
common_vendor.index.__f__("log", "at App.vue:4", "App Launch");
},
onShow: function() {
common_vendor.index.__f__("log", "at App.vue:7", "App Show");
},
onHide: function() {
common_vendor.index.__f__("log", "at App.vue:10", "App Hide");
}
};
function createApp() {
const app = common_vendor.createSSRApp(_sfc_main);
return {
app
};
}
createApp().app.mount("#app");
exports.createApp = createApp;
//# sourceMappingURL=../.sourcemap/mp-weixin/app.js.map
{
"pages": [
"pages/index/index"
],
"window": {
"navigationBarTextStyle": "white",
"navigationBarTitleText": "韭家投资日记",
"navigationBarBackgroundColor": "#4A90E2",
"backgroundColor": "#f5f5f5"
},
"usingComponents": {}
}
\ No newline at end of file
/*每个页面公共css */
page{--status-bar-height:25px;--top-window-height:0px;--window-top:0px;--window-bottom:0px;--window-left:0px;--window-right:0px;--window-magin:0px}[data-c-h="true"]{display: none !important;}
\ No newline at end of file
"use strict";
const _imports_0 = "/static/logo.png";
exports._imports_0 = _imports_0;
//# sourceMappingURL=../../.sourcemap/mp-weixin/common/assets.js.map
{
"navigationBarTitleText": "韭家投资日记",
"navigationBarTextStyle": "white",
"navigationBarBackgroundColor": "#4A90E2",
"backgroundColor": "#f5f5f5",
"usingComponents": {}
}
\ No newline at end of file
<view class="container data-v-1cf27b2a"><view class="date-header data-v-1cf27b2a"><view class="date-selector data-v-1cf27b2a" bindtap="{{b}}"><text class="date-text data-v-1cf27b2a">{{a}}</text><text class="calendar-icon data-v-1cf27b2a">📅</text></view><view class="edit-toggle data-v-1cf27b2a" bindtap="{{d}}"><text class="edit-toggle-text data-v-1cf27b2a">{{c}}</text></view></view><view wx:if="{{e}}" class="calendar-overlay data-v-1cf27b2a" bindtap="{{l}}"><view class="calendar-popup data-v-1cf27b2a" catchtap="{{k}}"><view class="calendar-header data-v-1cf27b2a"><text class="calendar-title data-v-1cf27b2a">{{f}}年{{g}}月</text><view class="calendar-nav data-v-1cf27b2a"><text class="nav-btn data-v-1cf27b2a" bindtap="{{h}}">◀</text><text class="nav-btn data-v-1cf27b2a" bindtap="{{i}}">▶</text></view></view><view class="calendar-weekdays data-v-1cf27b2a"><text class="weekday data-v-1cf27b2a">一</text><text class="weekday data-v-1cf27b2a">二</text><text class="weekday data-v-1cf27b2a">三</text><text class="weekday data-v-1cf27b2a">四</text><text class="weekday data-v-1cf27b2a">五</text><text class="weekday data-v-1cf27b2a">六</text><text class="weekday data-v-1cf27b2a">日</text></view><view class="calendar-days data-v-1cf27b2a"><view wx:for="{{j}}" wx:for-item="week" wx:key="b" class="calendar-row data-v-1cf27b2a"><view wx:for="{{week.a}}" wx:for-item="day" wx:key="b" class="{{['calendar-day', 'data-v-1cf27b2a', day.c && 'other-month', day.d && 'selected', day.e && 'today']}}" bindtap="{{day.f}}"><text class="day-number data-v-1cf27b2a">{{day.a}}</text></view></view></view></view></view><view class="account-overview data-v-1cf27b2a"><view class="balance-section data-v-1cf27b2a"><view class="balance-left data-v-1cf27b2a"><text class="balance-label data-v-1cf27b2a">账户余额</text><view wx:if="{{m}}" class="balance-amount data-v-1cf27b2a">¥{{n}}</view><input wx:else class="balance-input data-v-1cf27b2a" type="text" placeholder="请输入账户余额" value="{{o}}" bindinput="{{p}}"/></view><view class="balance-right data-v-1cf27b2a"><text class="asset-label data-v-1cf27b2a">持仓仓位</text><view class="{{['progress-circle', 'data-v-1cf27b2a', r]}}" style="{{s}}" bindtap="{{t}}"><text class="progress-text data-v-1cf27b2a">{{q}}%</text></view></view></view><view class="profit-section data-v-1cf27b2a"><view class="profit-item data-v-1cf27b2a"><text class="profit-label data-v-1cf27b2a">今日盈亏</text><view wx:if="{{v}}" class="profit-value positive data-v-1cf27b2a">{{w}}</view><view wx:else class="profit-input-wrapper data-v-1cf27b2a"><input class="profit-input data-v-1cf27b2a" type="text" placeholder="请输入今日盈亏" value="{{x}}" bindinput="{{y}}"/></view></view><view class="profit-item data-v-1cf27b2a"><text class="profit-label data-v-1cf27b2a">盈亏比例</text><text class="profit-value positive data-v-1cf27b2a">{{z}}%</text></view></view></view><view class="holdings-section data-v-1cf27b2a"><view class="section-header data-v-1cf27b2a"><text class="section-title data-v-1cf27b2a">持仓</text><view wx:if="{{A}}" class="add-holding-btn data-v-1cf27b2a" bindtap="{{B}}"><text class="add-icon data-v-1cf27b2a">+</text><text class="add-text data-v-1cf27b2a">新增</text></view></view><view class="holdings-grid data-v-1cf27b2a"><view wx:for="{{C}}" wx:for-item="holding" wx:key="x" class="{{['holding-card', 'data-v-1cf27b2a', holding.y && 'card-deleted']}}"><view wx:if="{{D}}" class="delete-btn data-v-1cf27b2a" bindtap="{{holding.b}}"><text class="delete-icon data-v-1cf27b2a">{{holding.a}}</text></view><view class="holding-header data-v-1cf27b2a"><view wx:if="{{holding.c}}" class="stock-name-wrapper data-v-1cf27b2a"><text class="stock-name data-v-1cf27b2a">{{holding.d}}</text><text wx:if="{{holding.e}}" class="lock-icon data-v-1cf27b2a">🔒</text></view><input wx:else class="stock-name-input data-v-1cf27b2a" type="text" placeholder="股票名称" value="{{holding.f}}" bindinput="{{holding.g}}"/><text class="position-percentage data-v-1cf27b2a">仓位 {{holding.h}}</text></view><view class="stock-price data-v-1cf27b2a"><view wx:if="{{E}}" class="price-value data-v-1cf27b2a">{{holding.i}}</view><input wx:else class="price-input data-v-1cf27b2a" type="text" placeholder="价格" value="{{holding.j}}" bindinput="{{holding.k}}"/><view wx:if="{{F}}" class="{{['stock-change', 'data-v-1cf27b2a', holding.m]}}">{{holding.l}}</view><input wx:else class="change-input data-v-1cf27b2a" type="text" placeholder="涨跌幅" value="{{holding.n}}" bindinput="{{holding.o}}"/></view><view class="holding-amounts data-v-1cf27b2a"><view class="amount-labels data-v-1cf27b2a"><text class="amount-label data-v-1cf27b2a">持仓金额</text><text class="amount-label data-v-1cf27b2a">盈亏金额</text></view><view class="amount-row data-v-1cf27b2a"><view class="amount-field data-v-1cf27b2a"><view wx:if="{{G}}" class="amount-value data-v-1cf27b2a">¥{{holding.p}}</view><input wx:else class="amount-input data-v-1cf27b2a" type="text" placeholder="持仓金额" value="{{holding.q}}" bindinput="{{holding.r}}"/></view><view class="amount-field data-v-1cf27b2a"><view wx:if="{{H}}" class="{{['amount-value', 'data-v-1cf27b2a', holding.t]}}">{{holding.s}}</view><input wx:else class="amount-input data-v-1cf27b2a" type="text" placeholder="盈亏金额" value="{{holding.v}}" bindinput="{{holding.w}}"/></view></view></view></view></view></view><view class="operations-section data-v-1cf27b2a"><text class="section-title data-v-1cf27b2a">今日操作</text><view class="operations-list data-v-1cf27b2a"><view wx:for="{{I}}" wx:for-item="group" wx:key="m" class="operation-group data-v-1cf27b2a"><view class="operation-stock-header data-v-1cf27b2a"><text class="operation-stock data-v-1cf27b2a">{{group.a}}</text><text class="{{['current-price', 'data-v-1cf27b2a', group.c]}}">{{group.b}}</text><text class="{{['price-change', 'data-v-1cf27b2a', group.e]}}">{{group.d}}</text><text class="holder-count data-v-1cf27b2a">{{group.f}}人持有</text></view><view class="operations-list-continuous data-v-1cf27b2a"><view wx:for="{{group.g}}" wx:for-item="op" wx:key="f" class="operation-item data-v-1cf27b2a"><view class="operation-header data-v-1cf27b2a"><view class="{{['operation-type', 'data-v-1cf27b2a', op.c]}}"><text class="type-icon data-v-1cf27b2a">{{op.a}}</text><text class="type-text data-v-1cf27b2a">{{op.b}}</text></view><text class="operation-details data-v-1cf27b2a">价格: {{op.d}} 数量: {{op.e}}</text></view></view></view><view wx:if="{{group.h}}" class="operation-notes data-v-1cf27b2a"><view wx:if="{{group.i}}" class="reasons-section data-v-1cf27b2a"><text class="section-subtitle data-v-1cf27b2a">操作理由</text><view wx:for="{{group.j}}" wx:for-item="reason" wx:key="c" class="reason-item data-v-1cf27b2a"><text class="reason-content data-v-1cf27b2a">{{reason.a}}</text><text class="reason-date data-v-1cf27b2a">{{reason.b}}</text></view></view><view wx:if="{{group.k}}" class="analyses-section data-v-1cf27b2a"><text class="section-subtitle data-v-1cf27b2a">马后炮分析</text><view wx:for="{{group.l}}" wx:for-item="analysis" wx:key="c" class="analysis-item data-v-1cf27b2a"><text class="analysis-content data-v-1cf27b2a">{{analysis.a}}</text><text class="analysis-date data-v-1cf27b2a">{{analysis.b}}</text></view></view></view></view></view></view><view wx:if="{{J}}" class="floating-button data-v-1cf27b2a" bindtap="{{K}}"><text class="float-icon data-v-1cf27b2a">+</text></view><view wx:if="{{L}}" class="edit-buttons data-v-1cf27b2a"><view class="edit-button cancel data-v-1cf27b2a" bindtap="{{M}}"><text class="edit-button-text data-v-1cf27b2a">取消</text></view><view class="edit-button submit data-v-1cf27b2a" bindtap="{{N}}"><text class="edit-button-text data-v-1cf27b2a">保存</text></view></view><view wx:if="{{O}}" class="bottom-button data-v-1cf27b2a" bindtap="{{P}}"><text class="bottom-text data-v-1cf27b2a">提交修改</text></view></view>
\ No newline at end of file
.container.data-v-1cf27b2a {
min-height: 100vh;
background: #f5f7fa;
padding-bottom: 120rpx;
}
/* 日期选择器 */
.date-header.data-v-1cf27b2a {
background: white;
padding: 20rpx 30rpx;
border-bottom: 1rpx solid #f0f0f0;
position: -webkit-sticky;
position: sticky;
top: 0;
z-index: 99;
display: flex;
justify-content: space-between;
align-items: center;
}
.date-selector.data-v-1cf27b2a {
display: flex;
align-items: center;
padding: 15rpx 0;
}
.edit-toggle.data-v-1cf27b2a {
padding: 15rpx 25rpx;
background: #007aff;
border-radius: 25rpx;
cursor: pointer;
transition: background-color 0.2s;
}
.edit-toggle.data-v-1cf27b2a:hover {
background: #0056b3;
}
.edit-toggle-text.data-v-1cf27b2a {
color: white;
font-size: 28rpx;
font-weight: 500;
}
.date-text.data-v-1cf27b2a {
color: #333;
font-size: 32rpx;
font-weight: bold;
margin-right: 15rpx;
}
.calendar-icon.data-v-1cf27b2a {
font-size: 28rpx;
color: #007aff;
}
/* 自定义日历 */
.calendar-overlay.data-v-1cf27b2a {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
display: flex;
align-items: center;
justify-content: center;
z-index: 1000;
}
.calendar-popup.data-v-1cf27b2a {
background: white;
width: 90%;
max-width: 600rpx;
border-radius: 20rpx;
padding: 30rpx;
box-shadow: 0 10rpx 30rpx rgba(0, 0, 0, 0.3);
}
.calendar-header.data-v-1cf27b2a {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 30rpx;
padding-bottom: 20rpx;
border-bottom: 1rpx solid #f0f0f0;
}
.calendar-title.data-v-1cf27b2a {
font-size: 36rpx;
font-weight: bold;
color: #333;
}
.calendar-nav.data-v-1cf27b2a {
display: flex;
gap: 30rpx;
}
.nav-btn.data-v-1cf27b2a {
width: 60rpx;
height: 60rpx;
background: #f5f5f5;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 24rpx;
color: #666;
}
.calendar-weekdays.data-v-1cf27b2a {
display: grid;
grid-template-columns: repeat(7, 1fr);
gap: 10rpx;
margin-bottom: 20rpx;
}
.weekday.data-v-1cf27b2a {
text-align: center;
color: #999;
font-size: 24rpx;
padding: 15rpx 0;
}
.calendar-days.data-v-1cf27b2a {
display: flex;
flex-direction: column;
gap: 5rpx;
}
.calendar-row.data-v-1cf27b2a {
display: grid;
grid-template-columns: repeat(7, 1fr);
gap: 5rpx;
}
.calendar-day.data-v-1cf27b2a {
aspect-ratio: 1;
display: flex;
align-items: center;
justify-content: center;
border-radius: 8rpx;
cursor: pointer;
transition: all 0.2s;
}
.calendar-day.other-month.data-v-1cf27b2a {
opacity: 0.3;
}
.calendar-day.selected.data-v-1cf27b2a {
background: #007aff;
color: white;
}
.calendar-day.today.data-v-1cf27b2a {
background: #e8f4ff;
color: #007aff;
font-weight: bold;
}
.calendar-day.selected.today.data-v-1cf27b2a {
background: #007aff;
color: white;
}
.day-number.data-v-1cf27b2a {
font-size: 28rpx;
}
/* 可编辑字段样式 */
.editable-field.data-v-1cf27b2a {
display: flex;
align-items: center;
cursor: pointer;
padding: 4rpx 8rpx;
border-radius: 6rpx;
transition: background-color 0.2s;
position: relative;
}
.editable-field.data-v-1cf27b2a:hover {
background-color: rgba(0, 122, 255, 0.1);
}
.edit-icon.data-v-1cf27b2a {
font-size: 20rpx;
margin-left: 8rpx;
opacity: 0.6;
transition: opacity 0.2s;
}
.editable-field:hover .edit-icon.data-v-1cf27b2a {
opacity: 1;
}
/* 账户概览 */
.account-overview.data-v-1cf27b2a {
background: white;
margin: 20rpx;
border-radius: 16rpx;
padding: 30rpx;
box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1);
}
.balance-section.data-v-1cf27b2a {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 30rpx;
}
.balance-left.data-v-1cf27b2a {
flex: 1;
}
.balance-label.data-v-1cf27b2a {
display: block;
color: #666;
font-size: 28rpx;
margin-bottom: 10rpx;
}
.balance-amount.data-v-1cf27b2a {
display: block;
color: #333;
font-size: 48rpx;
font-weight: bold;
}
.balance-input.data-v-1cf27b2a {
max-width: 300rpx;
font-size: 48rpx;
font-weight: bold;
color: #333;
border: 2rpx solid #007aff;
border-radius: 12rpx;
padding: 15rpx 20rpx;
background: #f8f9fa;
box-shadow: 0 2rpx 8rpx rgba(0, 122, 255, 0.1);
}
.profit-input.data-v-1cf27b2a {
max-width: 200rpx;
font-size: 28rpx;
font-weight: bold;
color: #333;
border: 2rpx solid #007aff;
border-radius: 10rpx;
padding: 12rpx 16rpx;
background: #f8f9fa;
text-align: center;
box-shadow: 0 2rpx 8rpx rgba(0, 122, 255, 0.1);
}
.profit-input-wrapper.data-v-1cf27b2a {
margin-top: 8rpx;
display: flex;
justify-content: center;
}
.balance-right.data-v-1cf27b2a {
text-align: center;
}
.asset-label.data-v-1cf27b2a {
display: block;
color: #666;
font-size: 24rpx;
margin-bottom: 10rpx;
}
.progress-circle.data-v-1cf27b2a {
width: 80rpx;
height: 80rpx;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
position: relative;
}
/* 不同仓位等级的颜色 - 这些样式已由动态样式替代,可以保留作为备用 */
.progress-circle.position-safe.data-v-1cf27b2a {
/* background: conic-gradient(#00d4aa 0deg 306deg, #e6f7ff 306deg 360deg); */
}
.progress-circle.position-medium.data-v-1cf27b2a {
/* background: conic-gradient(#ffa502 0deg 306deg, #e6f7ff 306deg 360deg); */
}
.progress-circle.position-high.data-v-1cf27b2a {
/* background: conic-gradient(#ff4757 0deg 306deg, #e6f7ff 306deg 360deg); */
}
.progress-circle.data-v-1cf27b2a::after {
content: '';
width: 60rpx;
height: 60rpx;
background: white;
border-radius: 50%;
position: absolute;
}
.progress-text.data-v-1cf27b2a {
font-size: 24rpx;
font-weight: bold;
z-index: 1;
}
/* 不同仓位等级的文字颜色 */
.position-safe .progress-text.data-v-1cf27b2a {
color: #00d4aa;
}
.position-medium .progress-text.data-v-1cf27b2a {
color: #ffa502;
}
.position-high .progress-text.data-v-1cf27b2a {
color: #ff4757;
}
.profit-section.data-v-1cf27b2a {
display: flex;
justify-content: space-between;
}
.profit-item.data-v-1cf27b2a {
text-align: center;
}
.profit-label.data-v-1cf27b2a {
display: block;
color: #666;
font-size: 24rpx;
margin-bottom: 8rpx;
}
.profit-value.data-v-1cf27b2a {
display: block;
font-size: 28rpx;
font-weight: bold;
}
.profit-value.positive.data-v-1cf27b2a {
color: #ff4757;
}
.profit-value.negative.data-v-1cf27b2a {
color: #00d4aa;
}
/* 持仓 */
.holdings-section.data-v-1cf27b2a {
margin: 20rpx;
}
.section-header.data-v-1cf27b2a {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20rpx;
}
.section-title.data-v-1cf27b2a {
display: block;
color: #333;
font-size: 32rpx;
font-weight: bold;
}
.add-holding-btn.data-v-1cf27b2a {
display: flex;
align-items: center;
gap: 8rpx;
padding: 8rpx 15rpx;
background: #007aff;
border-radius: 20rpx;
color: white;
font-size: 24rpx;
font-weight: 500;
cursor: pointer;
transition: background-color 0.2s;
}
.add-holding-btn.data-v-1cf27b2a:hover {
background: #0056b3;
}
.add-icon.data-v-1cf27b2a {
font-size: 28rpx;
}
.add-text.data-v-1cf27b2a {
font-size: 28rpx;
}
.holdings-grid.data-v-1cf27b2a {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 20rpx;
}
.holding-card.data-v-1cf27b2a {
background: white;
border-radius: 16rpx;
padding: 25rpx;
box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1);
position: relative;
}
.card-deleted.data-v-1cf27b2a {
opacity: 0.5;
pointer-events: none;
background: #f5f5f5;
border: 2rpx dashed #ccc;
}
.card-deleted .stock-name.data-v-1cf27b2a,
.card-deleted .amount-value.data-v-1cf27b2a,
.card-deleted .price-value.data-v-1cf27b2a {
color: #999;
text-decoration: line-through;
}
.card-deleted .delete-btn.data-v-1cf27b2a {
background: #00d4aa;
pointer-events: auto;
}
.delete-btn.data-v-1cf27b2a {
position: absolute;
top: 15rpx;
right: 15rpx;
background: #ff4757;
border-radius: 50%;
width: 50rpx;
height: 50rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 30rpx;
color: white;
z-index: 1;
cursor: pointer;
transition: background-color 0.2s;
}
.delete-btn.data-v-1cf27b2a:hover {
background: #e03e4e;
}
.delete-icon.data-v-1cf27b2a {
font-size: 30rpx;
}
.holding-header.data-v-1cf27b2a {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 20rpx;
}
.stock-name-wrapper.data-v-1cf27b2a {
display: flex;
align-items: center;
}
.stock-name.data-v-1cf27b2a {
color: #333;
font-size: 30rpx;
font-weight: bold;
margin-right: 8rpx;
}
.lock-icon.data-v-1cf27b2a {
font-size: 20rpx;
color: #999;
}
.stock-name-input.data-v-1cf27b2a {
max-width: 200rpx;
font-size: 30rpx;
font-weight: bold;
color: #333;
border: 2rpx solid #007aff;
border-radius: 10rpx;
padding: 12rpx 16rpx;
background: #f8f9fa;
text-align: center;
box-shadow: 0 2rpx 8rpx rgba(0, 122, 255, 0.1);
}
.position-percentage.data-v-1cf27b2a {
font-size: 22rpx;
color: #007aff;
background: #e8f4ff;
padding: 4rpx 10rpx;
border-radius: 6rpx;
}
.stock-change.data-v-1cf27b2a {
font-size: 22rpx;
padding: 4rpx 10rpx;
border-radius: 6rpx;
}
.stock-change.positive.data-v-1cf27b2a {
color: #ff4757;
background: #fff1f0;
}
.stock-change.negative.data-v-1cf27b2a {
color: #00d4aa;
background: #f0fff4;
}
.change-input.data-v-1cf27b2a {
max-width: 100rpx;
font-size: 24rpx;
color: #333;
padding: 12rpx 16rpx;
border-radius: 8rpx;
border: 2rpx solid #007aff;
background: #f8f9fa;
text-align: right;
font-weight: 500;
box-shadow: 0 1rpx 6rpx rgba(0, 122, 255, 0.1);
transition: all 0.2s;
}
.stock-price.data-v-1cf27b2a {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 25rpx;
}
.price-value.data-v-1cf27b2a {
font-size: 40rpx;
font-weight: bold;
color: #333;
}
.price-input.data-v-1cf27b2a {
max-width: 100rpx;
font-size: 40rpx;
font-weight: bold;
color: #333;
border: 2rpx solid #007aff;
border-radius: 10rpx;
padding: 12rpx 16rpx;
background: #f8f9fa;
text-align: right;
box-shadow: 0 2rpx 8rpx rgba(0, 122, 255, 0.1);
}
.holding-amounts.data-v-1cf27b2a {
margin-bottom: 25rpx;
}
.amount-labels.data-v-1cf27b2a {
display: flex;
justify-content: space-between;
margin-bottom: 8rpx;
}
.amount-label.data-v-1cf27b2a {
color: #666;
font-size: 22rpx;
}
.amount-row.data-v-1cf27b2a {
display: flex;
justify-content: space-between;
margin-bottom: 8rpx;
}
.amount-field.data-v-1cf27b2a {
flex: 1;
margin-right: 10rpx;
display: flex;
justify-content: center;
align-items: center;
}
.amount-field.data-v-1cf27b2a:last-child {
margin-right: 0;
}
.amount-value.data-v-1cf27b2a {
color: #333;
font-weight: bold;
font-size: 24rpx;
cursor: pointer;
padding: 2rpx 4rpx;
border-radius: 4rpx;
transition: background-color 0.2s;
}
.amount-value.data-v-1cf27b2a:hover {
background-color: #f0f0f0;
}
.amount-value.profit.data-v-1cf27b2a {
color: #ff4757;
}
.amount-value.loss.data-v-1cf27b2a {
color: #00d4aa;
}
.amount-input.data-v-1cf27b2a {
max-width: 150rpx;
font-size: 24rpx;
color: #333;
padding: 12rpx 16rpx;
border-radius: 8rpx;
border: 2rpx solid #007aff;
background: #f8f9fa;
text-align: right;
font-weight: 500;
box-shadow: 0 1rpx 6rpx rgba(0, 122, 255, 0.1);
transition: all 0.2s;
}
/* 今日操作 */
.operations-section.data-v-1cf27b2a {
margin: 20rpx;
}
.operations-list.data-v-1cf27b2a {
background: white;
border-radius: 16rpx;
overflow: hidden;
box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1);
}
.operation-group.data-v-1cf27b2a {
border-bottom: 1rpx solid #f5f5f5;
padding: 30rpx;
}
.operation-group.data-v-1cf27b2a:last-child {
border-bottom: none;
}
.operation-stock-header.data-v-1cf27b2a {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 20rpx;
gap: 15rpx;
}
.operation-stock.data-v-1cf27b2a {
color: #333;
font-size: 28rpx;
font-weight: bold;
flex-shrink: 0;
}
.current-price.data-v-1cf27b2a {
font-size: 26rpx;
font-weight: bold;
flex-shrink: 0;
}
.current-price.positive.data-v-1cf27b2a {
color: #ff4757;
}
.current-price.negative.data-v-1cf27b2a {
color: #00d4aa;
}
.price-change.data-v-1cf27b2a {
font-size: 22rpx;
padding: 2rpx 8rpx;
border-radius: 4rpx;
font-weight: 500;
flex-shrink: 0;
}
.price-change.positive.data-v-1cf27b2a {
color: #ff4757;
background: #fff1f0;
}
.price-change.negative.data-v-1cf27b2a {
color: #00d4aa;
background: #f0fff4;
}
.holder-count.data-v-1cf27b2a {
font-size: 20rpx;
color: #007aff;
background: #e8f4ff;
padding: 4rpx 8rpx;
border-radius: 6rpx;
font-weight: 500;
flex-shrink: 0;
}
.operations-list-continuous.data-v-1cf27b2a {
margin-bottom: 20rpx;
}
.operations-list-continuous .operation-item.data-v-1cf27b2a {
margin-bottom: 10rpx;
padding: 15rpx;
background: #f8f9fa;
border-radius: 8rpx;
}
.operations-list-continuous .operation-item.data-v-1cf27b2a:last-child {
margin-bottom: 0;
}
.operation-notes.data-v-1cf27b2a {
margin-top: 15rpx;
}
.reasons-section.data-v-1cf27b2a,
.analyses-section.data-v-1cf27b2a {
margin-bottom: 20rpx;
}
.reasons-section.data-v-1cf27b2a:last-child,
.analyses-section.data-v-1cf27b2a:last-child {
margin-bottom: 0;
}
.section-subtitle.data-v-1cf27b2a {
display: block;
font-size: 26rpx;
font-weight: bold;
color: #333;
margin-bottom: 15rpx;
}
.reason-item.data-v-1cf27b2a,
.analysis-item.data-v-1cf27b2a {
background: #fffbeb;
padding: 20rpx;
border-radius: 8rpx;
margin-bottom: 10rpx;
border-left: 4rpx solid #d97706;
}
.analysis-item.data-v-1cf27b2a {
background: #f0f9ff;
border-left: 4rpx solid #0369a1;
}
.reason-item.data-v-1cf27b2a:last-child,
.analysis-item.data-v-1cf27b2a:last-child {
margin-bottom: 0;
}
.reason-content.data-v-1cf27b2a,
.analysis-content.data-v-1cf27b2a {
display: block;
font-size: 24rpx;
line-height: 1.6;
margin-bottom: 8rpx;
}
.reason-content.data-v-1cf27b2a {
color: #d97706;
}
.analysis-content.data-v-1cf27b2a {
color: #0369a1;
}
.reason-date.data-v-1cf27b2a,
.analysis-date.data-v-1cf27b2a {
display: block;
font-size: 20rpx;
color: #999;
text-align: right;
}
.operation-header.data-v-1cf27b2a {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10rpx;
}
.operation-type.data-v-1cf27b2a {
display: flex;
align-items: center;
padding: 8rpx 16rpx;
border-radius: 8rpx;
gap: 8rpx;
}
.operation-type.buy.data-v-1cf27b2a {
background: #fff1f0;
color: #ff4757;
}
.operation-type.sell.data-v-1cf27b2a {
background: #f0fff4;
color: #00d4aa;
}
.type-icon.data-v-1cf27b2a {
font-size: 20rpx;
}
.type-text.data-v-1cf27b2a {
font-size: 24rpx;
}
.operation-details.data-v-1cf27b2a {
color: #666;
font-size: 24rpx;
}
/* 悬浮按钮 */
.floating-button.data-v-1cf27b2a {
position: fixed;
right: 30rpx;
bottom: 160rpx;
width: 100rpx;
height: 100rpx;
background: #007aff;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4rpx 12rpx rgba(0, 122, 255, 0.4);
z-index: 100;
}
.float-icon.data-v-1cf27b2a {
color: white;
font-size: 48rpx;
font-weight: 300;
}
/* 底部按钮 */
.bottom-button.data-v-1cf27b2a {
position: fixed;
bottom: 30rpx;
left: 30rpx;
right: 30rpx;
height: 80rpx;
background: #007aff;
border-radius: 40rpx;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4rpx 12rpx rgba(0, 122, 255, 0.4);
z-index: 100;
}
.bottom-text.data-v-1cf27b2a {
color: white;
font-size: 32rpx;
font-weight: 500;
}
/* 编辑模式按钮 */
.edit-buttons.data-v-1cf27b2a {
position: fixed;
bottom: 160rpx; /* 调整位置,使其在悬浮按钮下方 */
left: 30rpx;
right: 30rpx;
display: flex;
justify-content: space-around;
z-index: 100;
}
.edit-button.data-v-1cf27b2a {
flex: 1;
margin: 0 10rpx;
height: 80rpx;
border-radius: 40rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
font-weight: 500;
cursor: pointer;
transition: background-color 0.2s;
}
.edit-button.cancel.data-v-1cf27b2a {
background-color: #f0f0f0;
color: #333;
}
.edit-button.submit.data-v-1cf27b2a {
background-color: #007aff;
color: white;
}
.edit-button.cancel.data-v-1cf27b2a:hover {
background-color: #e0e0e0;
}
.edit-button.submit.data-v-1cf27b2a:hover {
background-color: #0056b3;
}
.edit-button-text.data-v-1cf27b2a {
font-size: 32rpx;
}
{
"description": "项目配置文件。",
"packOptions": {
"ignore": []
},
"setting": {
"urlCheck": false,
"es6": true,
"postcss": false,
"minified": false,
"newFeature": true,
"bigPackageSizeSupport": true
},
"compileType": "miniprogram",
"libVersion": "",
"appid": "wxdbcad78d98ca9fcc",
"projectname": "inversment-diary",
"condition": {
"search": {
"current": -1,
"list": []
},
"conversation": {
"current": -1,
"list": []
},
"game": {
"current": -1,
"list": []
},
"miniprogram": {
"current": -1,
"list": []
}
}
}
\ No newline at end of file