Commit b16a77521aec28a5bbdf37030edd3d845ed03773
1 parent
7f7044c5
修复所有确认工资条接口的XML注释,解决Swagger显示问题
- 将remarks中的```json代码块改为<code>标签(XML注释中不能使用```) - 为所有缺少注释的接口添加了完整的summary和remarks - 统一了所有9个工资服务确认接口的注释格式 - 包含示例请求、参数说明、注意事项等完整信息 修复的接口: 1. LqSalaryService (健康师) 2. LqTechTeacherSalaryService (科技部老师) 3. LqAssistantSalaryService (店助) 4. LqStoreManagerSalaryService (店长) 5. LqDirectorSalaryService (主任) 6. LqMajorProjectTeacherSalaryService (大项目老师) 7. LqMajorProjectDirectorSalaryService (大项目主管) 8. LqTechGeneralManagerSalaryService (科技部总经理) 9. LqBusinessUnitManagerSalaryService (事业部总经理)
Showing
3 changed files
with
566 additions
and
117 deletions
antis-ncc-admin/src/views/statisticsList/form9.vue
| @@ -359,14 +359,16 @@ | @@ -359,14 +359,16 @@ | ||
| 359 | <el-card class="dashboard-card" shadow="hover"> | 359 | <el-card class="dashboard-card" shadow="hover"> |
| 360 | <div slot="header" class="card-title"> | 360 | <div slot="header" class="card-title"> |
| 361 | <span><i class="el-icon-user"></i> 团队效能矩阵</span> | 361 | <span><i class="el-icon-user"></i> 团队效能矩阵</span> |
| 362 | - <el-button-group style="float: right"> | ||
| 363 | - <el-button size="mini" :type="coachRankType === 'billing' ? 'primary' : ''" | ||
| 364 | - @click="coachRankType = 'billing'">开单榜</el-button> | ||
| 365 | - <el-button size="mini" :type="coachRankType === 'consume' ? 'primary' : ''" | ||
| 366 | - @click="coachRankType = 'consume'">消耗榜</el-button> | ||
| 367 | - <el-button size="mini" :type="coachRankType === 'refund' ? 'primary' : ''" | ||
| 368 | - @click="coachRankType = 'refund'">客情警告</el-button> | ||
| 369 | - </el-button-group> | 362 | + <div class="card-title-actions"> |
| 363 | + <el-button-group class="modern-button-group"> | ||
| 364 | + <el-button size="mini" :class="coachRankType === 'billing' ? 'active' : ''" | ||
| 365 | + @click="coachRankType = 'billing'">开单榜</el-button> | ||
| 366 | + <el-button size="mini" :class="coachRankType === 'consume' ? 'active' : ''" | ||
| 367 | + @click="coachRankType = 'consume'">消耗榜</el-button> | ||
| 368 | + <el-button size="mini" :class="coachRankType === 'refund' ? 'active' : ''" | ||
| 369 | + @click="coachRankType = 'refund'">客情警告</el-button> | ||
| 370 | + </el-button-group> | ||
| 371 | + </div> | ||
| 370 | </div> | 372 | </div> |
| 371 | <el-table :data="coachRanking" size="mini" style="width: 100%"> | 373 | <el-table :data="coachRanking" size="mini" style="width: 100%"> |
| 372 | <el-table-column type="index" label="排名" width="50"></el-table-column> | 374 | <el-table-column type="index" label="排名" width="50"></el-table-column> |
| @@ -1964,7 +1966,7 @@ export default { | @@ -1964,7 +1966,7 @@ export default { | ||
| 1964 | <style lang="scss" scoped> | 1966 | <style lang="scss" scoped> |
| 1965 | .leadership-cockpit { | 1967 | .leadership-cockpit { |
| 1966 | padding: 16px; | 1968 | padding: 16px; |
| 1967 | - background-color: #f5f7fa; | 1969 | + background: linear-gradient(135deg, #f5f7fa 0%, #e8ecf1 50%, #f0f4f8 100%); |
| 1968 | min-height: 100vh; | 1970 | min-height: 100vh; |
| 1969 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; | 1971 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; |
| 1970 | 1972 | ||
| @@ -1973,10 +1975,23 @@ export default { | @@ -1973,10 +1975,23 @@ export default { | ||
| 1973 | justify-content: space-between; | 1975 | justify-content: space-between; |
| 1974 | align-items: center; | 1976 | align-items: center; |
| 1975 | margin-bottom: 20px; | 1977 | margin-bottom: 20px; |
| 1976 | - background: #fff; | 1978 | + background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%); |
| 1977 | padding: 12px 20px; | 1979 | padding: 12px 20px; |
| 1978 | - border-radius: 8px; | ||
| 1979 | - box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.05); | 1980 | + border-radius: 12px; |
| 1981 | + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08), 0 2px 8px rgba(0, 0, 0, 0.04); | ||
| 1982 | + border: 1px solid rgba(64, 158, 255, 0.1); | ||
| 1983 | + position: relative; | ||
| 1984 | + overflow: hidden; | ||
| 1985 | + | ||
| 1986 | + &::before { | ||
| 1987 | + content: ''; | ||
| 1988 | + position: absolute; | ||
| 1989 | + top: 0; | ||
| 1990 | + left: 0; | ||
| 1991 | + right: 0; | ||
| 1992 | + height: 3px; | ||
| 1993 | + background: linear-gradient(90deg, #409EFF 0%, #66b1ff 50%, #409EFF 100%); | ||
| 1994 | + } | ||
| 1980 | 1995 | ||
| 1981 | .page-title { | 1996 | .page-title { |
| 1982 | margin: 0; | 1997 | margin: 0; |
| @@ -2011,73 +2026,104 @@ export default { | @@ -2011,73 +2026,104 @@ export default { | ||
| 2011 | } | 2026 | } |
| 2012 | 2027 | ||
| 2013 | .kpi-card { | 2028 | .kpi-card { |
| 2014 | - background: #fff; | 2029 | + background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%); |
| 2015 | padding: 20px 10px; | 2030 | padding: 20px 10px; |
| 2016 | - border-radius: 8px; | 2031 | + border-radius: 12px; |
| 2017 | display: flex; | 2032 | display: flex; |
| 2018 | align-items: center; | 2033 | align-items: center; |
| 2019 | position: relative; | 2034 | position: relative; |
| 2020 | overflow: hidden; | 2035 | overflow: hidden; |
| 2021 | height: 100px; | 2036 | height: 100px; |
| 2022 | - box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.04); | ||
| 2023 | - transition: transform 0.3s; | 2037 | + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08), 0 2px 8px rgba(0, 0, 0, 0.04); |
| 2038 | + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); | ||
| 2024 | cursor: pointer; | 2039 | cursor: pointer; |
| 2040 | + border: 1px solid rgba(64, 158, 255, 0.08); | ||
| 2041 | + | ||
| 2042 | + &::after { | ||
| 2043 | + content: ''; | ||
| 2044 | + position: absolute; | ||
| 2045 | + top: 0; | ||
| 2046 | + left: 0; | ||
| 2047 | + right: 0; | ||
| 2048 | + height: 2px; | ||
| 2049 | + background: linear-gradient(90deg, transparent 0%, rgba(64, 158, 255, 0.3) 50%, transparent 100%); | ||
| 2050 | + opacity: 0; | ||
| 2051 | + transition: opacity 0.3s; | ||
| 2052 | + } | ||
| 2025 | 2053 | ||
| 2026 | &:hover { | 2054 | &:hover { |
| 2027 | transform: translateY(-4px); | 2055 | transform: translateY(-4px); |
| 2056 | + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12), 0 4px 12px rgba(0, 0, 0, 0.08); | ||
| 2057 | + border-color: rgba(64, 158, 255, 0.2); | ||
| 2058 | + | ||
| 2059 | + &::after { | ||
| 2060 | + opacity: 1; | ||
| 2061 | + } | ||
| 2028 | } | 2062 | } |
| 2029 | 2063 | ||
| 2030 | &.primary { | 2064 | &.primary { |
| 2031 | border-left: 4px solid #409EFF; | 2065 | border-left: 4px solid #409EFF; |
| 2066 | + background: linear-gradient(135deg, #ffffff 0%, rgba(64, 158, 255, 0.03) 100%); | ||
| 2032 | 2067 | ||
| 2033 | .kpi-icon { | 2068 | .kpi-icon { |
| 2034 | color: #409EFF; | 2069 | color: #409EFF; |
| 2035 | - background: rgba(64, 158, 255, 0.1); | 2070 | + background: linear-gradient(135deg, rgba(64, 158, 255, 0.15) 0%, rgba(64, 158, 255, 0.08) 100%); |
| 2071 | + box-shadow: 0 2px 8px rgba(64, 158, 255, 0.2); | ||
| 2036 | } | 2072 | } |
| 2037 | } | 2073 | } |
| 2038 | 2074 | ||
| 2039 | &.success { | 2075 | &.success { |
| 2040 | border-left: 4px solid #67C23A; | 2076 | border-left: 4px solid #67C23A; |
| 2077 | + background: linear-gradient(135deg, #ffffff 0%, rgba(103, 194, 58, 0.03) 100%); | ||
| 2041 | 2078 | ||
| 2042 | .kpi-icon { | 2079 | .kpi-icon { |
| 2043 | color: #67C23A; | 2080 | color: #67C23A; |
| 2044 | - background: rgba(103, 194, 58, 0.1); | 2081 | + background: linear-gradient(135deg, rgba(103, 194, 58, 0.15) 0%, rgba(103, 194, 58, 0.08) 100%); |
| 2082 | + box-shadow: 0 2px 8px rgba(103, 194, 58, 0.2); | ||
| 2045 | } | 2083 | } |
| 2046 | } | 2084 | } |
| 2047 | 2085 | ||
| 2048 | &.warning { | 2086 | &.warning { |
| 2049 | border-left: 4px solid #E6A23C; | 2087 | border-left: 4px solid #E6A23C; |
| 2088 | + background: linear-gradient(135deg, #ffffff 0%, rgba(230, 162, 60, 0.03) 100%); | ||
| 2050 | 2089 | ||
| 2051 | .kpi-icon { | 2090 | .kpi-icon { |
| 2052 | color: #E6A23C; | 2091 | color: #E6A23C; |
| 2053 | - background: rgba(230, 162, 60, 0.1); | 2092 | + background: linear-gradient(135deg, rgba(230, 162, 60, 0.15) 0%, rgba(230, 162, 60, 0.08) 100%); |
| 2093 | + box-shadow: 0 2px 8px rgba(230, 162, 60, 0.2); | ||
| 2054 | } | 2094 | } |
| 2055 | } | 2095 | } |
| 2056 | 2096 | ||
| 2057 | &.info { | 2097 | &.info { |
| 2058 | border-left: 4px solid #909399; | 2098 | border-left: 4px solid #909399; |
| 2099 | + background: linear-gradient(135deg, #ffffff 0%, rgba(144, 147, 153, 0.03) 100%); | ||
| 2059 | 2100 | ||
| 2060 | .kpi-icon { | 2101 | .kpi-icon { |
| 2061 | color: #909399; | 2102 | color: #909399; |
| 2062 | - background: rgba(144, 147, 153, 0.1); | 2103 | + background: linear-gradient(135deg, rgba(144, 147, 153, 0.15) 0%, rgba(144, 147, 153, 0.08) 100%); |
| 2104 | + box-shadow: 0 2px 8px rgba(144, 147, 153, 0.2); | ||
| 2063 | } | 2105 | } |
| 2064 | } | 2106 | } |
| 2065 | 2107 | ||
| 2066 | &.danger { | 2108 | &.danger { |
| 2067 | border-left: 4px solid #F56C6C; | 2109 | border-left: 4px solid #F56C6C; |
| 2110 | + background: linear-gradient(135deg, #ffffff 0%, rgba(245, 108, 108, 0.03) 100%); | ||
| 2068 | 2111 | ||
| 2069 | .kpi-icon { | 2112 | .kpi-icon { |
| 2070 | color: #F56C6C; | 2113 | color: #F56C6C; |
| 2071 | - background: rgba(245, 108, 108, 0.1); | 2114 | + background: linear-gradient(135deg, rgba(245, 108, 108, 0.15) 0%, rgba(245, 108, 108, 0.08) 100%); |
| 2115 | + box-shadow: 0 2px 8px rgba(245, 108, 108, 0.2); | ||
| 2072 | } | 2116 | } |
| 2073 | } | 2117 | } |
| 2074 | 2118 | ||
| 2075 | &.error { | 2119 | &.error { |
| 2076 | border-left: 4px solid #f5222d; | 2120 | border-left: 4px solid #f5222d; |
| 2121 | + background: linear-gradient(135deg, #ffffff 0%, rgba(245, 34, 45, 0.03) 100%); | ||
| 2077 | 2122 | ||
| 2078 | .kpi-icon { | 2123 | .kpi-icon { |
| 2079 | color: #f5222d; | 2124 | color: #f5222d; |
| 2080 | - background: rgba(245, 34, 45, 0.1); | 2125 | + background: linear-gradient(135deg, rgba(245, 34, 45, 0.15) 0%, rgba(245, 34, 45, 0.08) 100%); |
| 2126 | + box-shadow: 0 2px 8px rgba(245, 34, 45, 0.2); | ||
| 2081 | } | 2127 | } |
| 2082 | } | 2128 | } |
| 2083 | 2129 | ||
| @@ -2122,23 +2168,116 @@ export default { | @@ -2122,23 +2168,116 @@ export default { | ||
| 2122 | 2168 | ||
| 2123 | /* Dashboard Cards */ | 2169 | /* Dashboard Cards */ |
| 2124 | .dashboard-card { | 2170 | .dashboard-card { |
| 2125 | - border: none; | ||
| 2126 | - border-radius: 8px; | 2171 | + border: 1px solid rgba(64, 158, 255, 0.1); |
| 2172 | + border-radius: 12px; | ||
| 2127 | margin-bottom: 16px; | 2173 | margin-bottom: 16px; |
| 2174 | + background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%); | ||
| 2175 | + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08), 0 2px 8px rgba(0, 0, 0, 0.04); | ||
| 2176 | + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); | ||
| 2177 | + overflow: hidden; | ||
| 2128 | 2178 | ||
| 2129 | - &::v-deep .el-card__header { | ||
| 2130 | - padding: 12px 20px; | ||
| 2131 | - border-bottom: 1px solid #f0f2f5; | 2179 | + &:hover { |
| 2180 | + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12), 0 4px 12px rgba(0, 0, 0, 0.08); | ||
| 2181 | + transform: translateY(-2px); | ||
| 2182 | + border-color: rgba(64, 158, 255, 0.2); | ||
| 2132 | } | 2183 | } |
| 2133 | 2184 | ||
| 2185 | + &::v-deep .el-card__header { | ||
| 2186 | + padding: 12px 20px; | ||
| 2187 | + border-bottom: 1px solid rgba(64, 158, 255, 0.1); | ||
| 2188 | + background: linear-gradient(135deg, rgba(64, 158, 255, 0.05) 0%, rgba(64, 158, 255, 0.02) 100%); | ||
| 2189 | + min-height: 48px; | ||
| 2190 | + display: flex; | ||
| 2191 | + align-items: center; | ||
| 2192 | + } | ||
| 2193 | + | ||
| 2134 | .card-title { | 2194 | .card-title { |
| 2135 | font-size: 15px; | 2195 | font-size: 15px; |
| 2136 | font-weight: 600; | 2196 | font-weight: 600; |
| 2137 | color: #303133; | 2197 | color: #303133; |
| 2198 | + display: flex; | ||
| 2199 | + align-items: center; | ||
| 2200 | + justify-content: space-between; | ||
| 2201 | + width: 100%; | ||
| 2202 | + | ||
| 2203 | + > span { | ||
| 2204 | + display: flex; | ||
| 2205 | + align-items: center; | ||
| 2206 | + } | ||
| 2138 | 2207 | ||
| 2139 | i { | 2208 | i { |
| 2140 | color: #409EFF; | 2209 | color: #409EFF; |
| 2141 | margin-right: 8px; | 2210 | margin-right: 8px; |
| 2211 | + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); | ||
| 2212 | + } | ||
| 2213 | + | ||
| 2214 | + .card-title-actions { | ||
| 2215 | + display: flex; | ||
| 2216 | + align-items: center; | ||
| 2217 | + margin-left: auto; | ||
| 2218 | + } | ||
| 2219 | + } | ||
| 2220 | + | ||
| 2221 | + &:hover .card-title i { | ||
| 2222 | + transform: scale(1.1) rotate(5deg); | ||
| 2223 | + } | ||
| 2224 | + | ||
| 2225 | + // 现代化按钮组样式 | ||
| 2226 | + &::v-deep .modern-button-group { | ||
| 2227 | + border-radius: 8px; | ||
| 2228 | + overflow: hidden; | ||
| 2229 | + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); | ||
| 2230 | + border: 1px solid rgba(64, 158, 255, 0.2); | ||
| 2231 | + background: #ffffff; | ||
| 2232 | + | ||
| 2233 | + .el-button { | ||
| 2234 | + border: none; | ||
| 2235 | + border-radius: 0; | ||
| 2236 | + margin: 0; | ||
| 2237 | + padding: 6px 16px; | ||
| 2238 | + font-size: 12px; | ||
| 2239 | + font-weight: 500; | ||
| 2240 | + color: #606266; | ||
| 2241 | + background: #ffffff; | ||
| 2242 | + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); | ||
| 2243 | + position: relative; | ||
| 2244 | + | ||
| 2245 | + &:not(:last-child) { | ||
| 2246 | + border-right: 1px solid rgba(64, 158, 255, 0.15); | ||
| 2247 | + } | ||
| 2248 | + | ||
| 2249 | + &:hover { | ||
| 2250 | + color: #409EFF; | ||
| 2251 | + background: linear-gradient(135deg, rgba(64, 158, 255, 0.08) 0%, rgba(64, 158, 255, 0.05) 100%); | ||
| 2252 | + transform: translateY(-1px); | ||
| 2253 | + } | ||
| 2254 | + | ||
| 2255 | + &.active { | ||
| 2256 | + color: #ffffff; | ||
| 2257 | + background: linear-gradient(135deg, #409EFF 0%, #66b1ff 100%); | ||
| 2258 | + box-shadow: 0 2px 8px rgba(64, 158, 255, 0.3); | ||
| 2259 | + font-weight: 600; | ||
| 2260 | + | ||
| 2261 | + &::after { | ||
| 2262 | + content: ''; | ||
| 2263 | + position: absolute; | ||
| 2264 | + bottom: 0; | ||
| 2265 | + left: 0; | ||
| 2266 | + right: 0; | ||
| 2267 | + height: 2px; | ||
| 2268 | + background: linear-gradient(90deg, #ffffff 0%, rgba(255, 255, 255, 0.8) 100%); | ||
| 2269 | + } | ||
| 2270 | + } | ||
| 2271 | + | ||
| 2272 | + &:first-child { | ||
| 2273 | + border-top-left-radius: 8px; | ||
| 2274 | + border-bottom-left-radius: 8px; | ||
| 2275 | + } | ||
| 2276 | + | ||
| 2277 | + &:last-child { | ||
| 2278 | + border-top-right-radius: 8px; | ||
| 2279 | + border-bottom-right-radius: 8px; | ||
| 2280 | + } | ||
| 2142 | } | 2281 | } |
| 2143 | } | 2282 | } |
| 2144 | } | 2283 | } |
| @@ -2181,19 +2320,38 @@ export default { | @@ -2181,19 +2320,38 @@ export default { | ||
| 2181 | } | 2320 | } |
| 2182 | 2321 | ||
| 2183 | .member-stat-item { | 2322 | .member-stat-item { |
| 2184 | - background: #f5f7fa; | ||
| 2185 | - border-radius: 8px; | 2323 | + background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%); |
| 2324 | + border-radius: 12px; | ||
| 2186 | padding: 16px 8px; | 2325 | padding: 16px 8px; |
| 2187 | display: flex; | 2326 | display: flex; |
| 2188 | flex-direction: column; | 2327 | flex-direction: column; |
| 2189 | - transition: all 0.3s ease; | ||
| 2190 | - border: none; | ||
| 2191 | - box-shadow: none; | 2328 | + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); |
| 2329 | + border: 1px solid rgba(64, 158, 255, 0.1); | ||
| 2330 | + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06); | ||
| 2192 | height: 160px; | 2331 | height: 160px; |
| 2332 | + position: relative; | ||
| 2333 | + overflow: hidden; | ||
| 2334 | + | ||
| 2335 | + &::before { | ||
| 2336 | + content: ''; | ||
| 2337 | + position: absolute; | ||
| 2338 | + top: 0; | ||
| 2339 | + left: 0; | ||
| 2340 | + right: 0; | ||
| 2341 | + height: 2px; | ||
| 2342 | + background: linear-gradient(90deg, transparent 0%, rgba(64, 158, 255, 0.3) 50%, transparent 100%); | ||
| 2343 | + opacity: 0; | ||
| 2344 | + transition: opacity 0.3s; | ||
| 2345 | + } | ||
| 2193 | 2346 | ||
| 2194 | &:hover { | 2347 | &:hover { |
| 2195 | - box-shadow: 0 8px 20px rgba(31, 45, 61, 0.12); | 2348 | + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12), 0 4px 12px rgba(0, 0, 0, 0.08); |
| 2196 | transform: translateY(-2px); | 2349 | transform: translateY(-2px); |
| 2350 | + border-color: rgba(64, 158, 255, 0.2); | ||
| 2351 | + | ||
| 2352 | + &::before { | ||
| 2353 | + opacity: 1; | ||
| 2354 | + } | ||
| 2197 | } | 2355 | } |
| 2198 | 2356 | ||
| 2199 | .stat-main { | 2357 | .stat-main { |
| @@ -2215,23 +2373,35 @@ export default { | @@ -2215,23 +2373,35 @@ export default { | ||
| 2215 | } | 2373 | } |
| 2216 | 2374 | ||
| 2217 | &.stat-item-1 .stat-icon { | 2375 | &.stat-item-1 .stat-icon { |
| 2218 | - background: rgba(64, 158, 255, 0.1); | 2376 | + background: linear-gradient(135deg, rgba(64, 158, 255, 0.15) 0%, rgba(64, 158, 255, 0.08) 100%); |
| 2219 | color: #409EFF; | 2377 | color: #409EFF; |
| 2378 | + box-shadow: 0 2px 8px rgba(64, 158, 255, 0.2); | ||
| 2379 | + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); | ||
| 2220 | } | 2380 | } |
| 2221 | 2381 | ||
| 2222 | &.stat-item-2 .stat-icon { | 2382 | &.stat-item-2 .stat-icon { |
| 2223 | - background: rgba(103, 194, 58, 0.1); | 2383 | + background: linear-gradient(135deg, rgba(103, 194, 58, 0.15) 0%, rgba(103, 194, 58, 0.08) 100%); |
| 2224 | color: #67C23A; | 2384 | color: #67C23A; |
| 2385 | + box-shadow: 0 2px 8px rgba(103, 194, 58, 0.2); | ||
| 2386 | + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); | ||
| 2225 | } | 2387 | } |
| 2226 | 2388 | ||
| 2227 | &.stat-item-3 .stat-icon { | 2389 | &.stat-item-3 .stat-icon { |
| 2228 | - background: rgba(230, 162, 60, 0.1); | 2390 | + background: linear-gradient(135deg, rgba(230, 162, 60, 0.15) 0%, rgba(230, 162, 60, 0.08) 100%); |
| 2229 | color: #E6A23C; | 2391 | color: #E6A23C; |
| 2392 | + box-shadow: 0 2px 8px rgba(230, 162, 60, 0.2); | ||
| 2393 | + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); | ||
| 2230 | } | 2394 | } |
| 2231 | 2395 | ||
| 2232 | &.stat-item-4 .stat-icon { | 2396 | &.stat-item-4 .stat-icon { |
| 2233 | - background: rgba(245, 108, 108, 0.1); | 2397 | + background: linear-gradient(135deg, rgba(245, 108, 108, 0.15) 0%, rgba(245, 108, 108, 0.08) 100%); |
| 2234 | color: #F56C6C; | 2398 | color: #F56C6C; |
| 2399 | + box-shadow: 0 2px 8px rgba(245, 108, 108, 0.2); | ||
| 2400 | + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); | ||
| 2401 | + } | ||
| 2402 | + | ||
| 2403 | + &:hover .stat-icon { | ||
| 2404 | + transform: scale(1.05) rotate(5deg); | ||
| 2235 | } | 2405 | } |
| 2236 | 2406 | ||
| 2237 | .stat-content { | 2407 | .stat-content { |
| @@ -2265,13 +2435,22 @@ export default { | @@ -2265,13 +2435,22 @@ export default { | ||
| 2265 | 2435 | ||
| 2266 | .stat-tag { | 2436 | .stat-tag { |
| 2267 | display: block; | 2437 | display: block; |
| 2268 | - background: #fff; | 2438 | + background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%); |
| 2269 | border-radius: 12px; | 2439 | border-radius: 12px; |
| 2270 | padding: 6px 10px; | 2440 | padding: 6px 10px; |
| 2271 | font-size: 12px; | 2441 | font-size: 12px; |
| 2272 | font-weight: 500; | 2442 | font-weight: 500; |
| 2273 | color: #303133; | 2443 | color: #303133; |
| 2274 | overflow: hidden; | 2444 | overflow: hidden; |
| 2445 | + border: 1px solid rgba(64, 158, 255, 0.08); | ||
| 2446 | + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04); | ||
| 2447 | + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); | ||
| 2448 | + | ||
| 2449 | + &:hover { | ||
| 2450 | + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); | ||
| 2451 | + transform: translateY(-1px); | ||
| 2452 | + border-color: rgba(64, 158, 255, 0.15); | ||
| 2453 | + } | ||
| 2275 | } | 2454 | } |
| 2276 | 2455 | ||
| 2277 | .stat-tag-inner { | 2456 | .stat-tag-inner { |
| @@ -2352,8 +2531,10 @@ export default { | @@ -2352,8 +2531,10 @@ export default { | ||
| 2352 | flex-direction: column; | 2531 | flex-direction: column; |
| 2353 | gap: 12px; | 2532 | gap: 12px; |
| 2354 | padding: 12px; | 2533 | padding: 12px; |
| 2355 | - background: #f5f7fa; | ||
| 2356 | - border-radius: 6px; | 2534 | + background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%); |
| 2535 | + border-radius: 12px; | ||
| 2536 | + border: 1px solid rgba(64, 158, 255, 0.1); | ||
| 2537 | + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06); | ||
| 2357 | } | 2538 | } |
| 2358 | 2539 | ||
| 2359 | .legend-item { | 2540 | .legend-item { |
| @@ -2361,12 +2542,17 @@ export default { | @@ -2361,12 +2542,17 @@ export default { | ||
| 2361 | align-items: center; | 2542 | align-items: center; |
| 2362 | gap: 10px; | 2543 | gap: 10px; |
| 2363 | padding: 8px; | 2544 | padding: 8px; |
| 2364 | - background: white; | ||
| 2365 | - border-radius: 4px; | ||
| 2366 | - transition: all 0.3s ease; | 2545 | + background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%); |
| 2546 | + border-radius: 8px; | ||
| 2547 | + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); | ||
| 2548 | + border: 1px solid rgba(64, 158, 255, 0.08); | ||
| 2549 | + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04); | ||
| 2367 | 2550 | ||
| 2368 | &:hover { | 2551 | &:hover { |
| 2369 | - background: #f0f2f5; | 2552 | + background: linear-gradient(135deg, #f8f9fa 0%, #ffffff 100%); |
| 2553 | + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); | ||
| 2554 | + transform: translateX(4px); | ||
| 2555 | + border-color: rgba(64, 158, 255, 0.2); | ||
| 2370 | } | 2556 | } |
| 2371 | } | 2557 | } |
| 2372 | 2558 | ||
| @@ -2432,23 +2618,136 @@ export default { | @@ -2432,23 +2618,136 @@ export default { | ||
| 2432 | display: flex; | 2618 | display: flex; |
| 2433 | flex-direction: column; | 2619 | flex-direction: column; |
| 2434 | overflow: hidden; | 2620 | overflow: hidden; |
| 2435 | - padding: 20px; | 2621 | + padding: 16px 20px 12px 20px; |
| 2622 | + min-height: 0; | ||
| 2436 | } | 2623 | } |
| 2437 | 2624 | ||
| 2438 | .rank-list { | 2625 | .rank-list { |
| 2439 | flex: 1; | 2626 | flex: 1; |
| 2440 | overflow-y: auto; | 2627 | overflow-y: auto; |
| 2441 | max-height: 100%; | 2628 | max-height: 100%; |
| 2629 | + min-height: 0; | ||
| 2630 | + padding-right: 4px; | ||
| 2631 | + | ||
| 2632 | + &::-webkit-scrollbar { | ||
| 2633 | + width: 6px; | ||
| 2634 | + } | ||
| 2635 | + | ||
| 2636 | + &::-webkit-scrollbar-track { | ||
| 2637 | + background: rgba(240, 242, 245, 0.5); | ||
| 2638 | + border-radius: 3px; | ||
| 2639 | + } | ||
| 2640 | + | ||
| 2641 | + &::-webkit-scrollbar-thumb { | ||
| 2642 | + background: linear-gradient(135deg, #c0c4cc 0%, #909399 100%); | ||
| 2643 | + border-radius: 3px; | ||
| 2644 | + transition: background 0.3s; | ||
| 2645 | + | ||
| 2646 | + &:hover { | ||
| 2647 | + background: linear-gradient(135deg, #909399 0%, #606266 100%); | ||
| 2648 | + } | ||
| 2649 | + } | ||
| 2442 | } | 2650 | } |
| 2443 | 2651 | ||
| 2444 | &::v-deep .el-table { | 2652 | &::v-deep .el-table { |
| 2445 | flex: 1; | 2653 | flex: 1; |
| 2446 | overflow: hidden; | 2654 | overflow: hidden; |
| 2655 | + border-radius: 8px; | ||
| 2656 | + border: 1px solid rgba(64, 158, 255, 0.1); | ||
| 2657 | + } | ||
| 2658 | + | ||
| 2659 | + &::v-deep .el-table__header { | ||
| 2660 | + th { | ||
| 2661 | + background: linear-gradient(135deg, rgba(64, 158, 255, 0.08) 0%, rgba(64, 158, 255, 0.05) 100%); | ||
| 2662 | + color: #303133; | ||
| 2663 | + font-weight: 600; | ||
| 2664 | + border-bottom: 1px dotted rgba(64, 158, 255, 0.15); | ||
| 2665 | + padding: 12px 0; | ||
| 2666 | + height: 48px; | ||
| 2667 | + } | ||
| 2668 | + } | ||
| 2669 | + | ||
| 2670 | + &::v-deep .el-table__body { | ||
| 2671 | + tr { | ||
| 2672 | + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); | ||
| 2673 | + | ||
| 2674 | + &:hover { | ||
| 2675 | + background: linear-gradient(90deg, rgba(64, 158, 255, 0.05) 0%, rgba(64, 158, 255, 0.02) 100%) !important; | ||
| 2676 | + transform: translateX(4px); | ||
| 2677 | + } | ||
| 2678 | + } | ||
| 2679 | + | ||
| 2680 | + td { | ||
| 2681 | + border-bottom: 1px dotted rgba(64, 158, 255, 0.15); | ||
| 2682 | + padding: 8px 0; | ||
| 2683 | + | ||
| 2684 | + &:first-child { | ||
| 2685 | + .cell { | ||
| 2686 | + display: flex; | ||
| 2687 | + align-items: center; | ||
| 2688 | + justify-content: center; | ||
| 2689 | + | ||
| 2690 | + span { | ||
| 2691 | + display: inline-flex; | ||
| 2692 | + align-items: center; | ||
| 2693 | + justify-content: center; | ||
| 2694 | + width: 20px; | ||
| 2695 | + height: 20px; | ||
| 2696 | + border-radius: 4px; | ||
| 2697 | + background: linear-gradient(135deg, #909399 0%, #606266 100%); | ||
| 2698 | + color: #fff; | ||
| 2699 | + font-size: 11px; | ||
| 2700 | + font-weight: 600; | ||
| 2701 | + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.12); | ||
| 2702 | + } | ||
| 2703 | + } | ||
| 2704 | + } | ||
| 2705 | + } | ||
| 2706 | + } | ||
| 2707 | + | ||
| 2708 | + &::v-deep .el-table__row { | ||
| 2709 | + &:last-child td { | ||
| 2710 | + border-bottom: none; | ||
| 2711 | + } | ||
| 2712 | + | ||
| 2713 | + // 前三名特殊样式 | ||
| 2714 | + &:nth-child(1) td:first-child .cell span { | ||
| 2715 | + background: linear-gradient(135deg, #F56C6C 0%, #ff8080 100%); | ||
| 2716 | + box-shadow: 0 1px 6px rgba(245, 108, 108, 0.3); | ||
| 2717 | + } | ||
| 2718 | + | ||
| 2719 | + &:nth-child(2) td:first-child .cell span { | ||
| 2720 | + background: linear-gradient(135deg, #E6A23C 0%, #f0b45a 100%); | ||
| 2721 | + box-shadow: 0 1px 6px rgba(230, 162, 60, 0.3); | ||
| 2722 | + } | ||
| 2723 | + | ||
| 2724 | + &:nth-child(3) td:first-child .cell span { | ||
| 2725 | + background: linear-gradient(135deg, #409EFF 0%, #66b1ff 100%); | ||
| 2726 | + box-shadow: 0 1px 6px rgba(64, 158, 255, 0.3); | ||
| 2727 | + } | ||
| 2447 | } | 2728 | } |
| 2448 | 2729 | ||
| 2449 | &::v-deep .el-table__body-wrapper { | 2730 | &::v-deep .el-table__body-wrapper { |
| 2450 | max-height: calc(100% - 40px); | 2731 | max-height: calc(100% - 40px); |
| 2451 | overflow-y: auto; | 2732 | overflow-y: auto; |
| 2733 | + | ||
| 2734 | + &::-webkit-scrollbar { | ||
| 2735 | + width: 6px; | ||
| 2736 | + } | ||
| 2737 | + | ||
| 2738 | + &::-webkit-scrollbar-track { | ||
| 2739 | + background: rgba(240, 242, 245, 0.5); | ||
| 2740 | + border-radius: 3px; | ||
| 2741 | + } | ||
| 2742 | + | ||
| 2743 | + &::-webkit-scrollbar-thumb { | ||
| 2744 | + background: linear-gradient(135deg, #c0c4cc 0%, #909399 100%); | ||
| 2745 | + border-radius: 3px; | ||
| 2746 | + | ||
| 2747 | + &:hover { | ||
| 2748 | + background: linear-gradient(135deg, #909399 0%, #606266 100%); | ||
| 2749 | + } | ||
| 2750 | + } | ||
| 2452 | } | 2751 | } |
| 2453 | } | 2752 | } |
| 2454 | } | 2753 | } |
| @@ -2459,7 +2758,18 @@ export default { | @@ -2459,7 +2758,18 @@ export default { | ||
| 2459 | display: flex; | 2758 | display: flex; |
| 2460 | align-items: center; | 2759 | align-items: center; |
| 2461 | padding: 12px 0; | 2760 | padding: 12px 0; |
| 2462 | - border-bottom: 1px dotted #EBEEF5; | 2761 | + border-bottom: 1px dotted rgba(64, 158, 255, 0.15); |
| 2762 | + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); | ||
| 2763 | + border-radius: 4px; | ||
| 2764 | + margin: 0; | ||
| 2765 | + | ||
| 2766 | + &:hover { | ||
| 2767 | + background: linear-gradient(90deg, rgba(64, 158, 255, 0.05) 0%, rgba(64, 158, 255, 0.02) 100%); | ||
| 2768 | + transform: translateX(4px); | ||
| 2769 | + border-bottom-color: rgba(64, 158, 255, 0.3); | ||
| 2770 | + padding-left: 4px; | ||
| 2771 | + padding-right: 4px; | ||
| 2772 | + } | ||
| 2463 | 2773 | ||
| 2464 | &:last-child { | 2774 | &:last-child { |
| 2465 | border-bottom: none; | 2775 | border-bottom: none; |
| @@ -2469,37 +2779,58 @@ export default { | @@ -2469,37 +2779,58 @@ export default { | ||
| 2469 | width: 20px; | 2779 | width: 20px; |
| 2470 | height: 20px; | 2780 | height: 20px; |
| 2471 | border-radius: 4px; | 2781 | border-radius: 4px; |
| 2472 | - background: #909399; | 2782 | + background: linear-gradient(135deg, #909399 0%, #606266 100%); |
| 2473 | color: #fff; | 2783 | color: #fff; |
| 2474 | - font-size: 12px; | 2784 | + font-size: 11px; |
| 2785 | + font-weight: 600; | ||
| 2475 | display: flex; | 2786 | display: flex; |
| 2476 | align-items: center; | 2787 | align-items: center; |
| 2477 | justify-content: center; | 2788 | justify-content: center; |
| 2478 | - margin-right: 12px; | 2789 | + margin-right: 10px; |
| 2790 | + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.12); | ||
| 2791 | + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); | ||
| 2792 | + flex-shrink: 0; | ||
| 2479 | 2793 | ||
| 2480 | &.top1 { | 2794 | &.top1 { |
| 2481 | - background: #F56C6C; | 2795 | + background: linear-gradient(135deg, #F56C6C 0%, #ff8080 100%); |
| 2796 | + box-shadow: 0 1px 6px rgba(245, 108, 108, 0.3); | ||
| 2482 | } | 2797 | } |
| 2483 | 2798 | ||
| 2484 | &.top2 { | 2799 | &.top2 { |
| 2485 | - background: #E6A23C; | 2800 | + background: linear-gradient(135deg, #E6A23C 0%, #f0b45a 100%); |
| 2801 | + box-shadow: 0 1px 6px rgba(230, 162, 60, 0.3); | ||
| 2486 | } | 2802 | } |
| 2487 | 2803 | ||
| 2488 | &.top3 { | 2804 | &.top3 { |
| 2489 | - background: #409EFF; | 2805 | + background: linear-gradient(135deg, #409EFF 0%, #66b1ff 100%); |
| 2806 | + box-shadow: 0 1px 6px rgba(64, 158, 255, 0.3); | ||
| 2490 | } | 2807 | } |
| 2491 | } | 2808 | } |
| 2492 | 2809 | ||
| 2810 | + &:hover .rank-no { | ||
| 2811 | + transform: scale(1.05) rotate(3deg); | ||
| 2812 | + } | ||
| 2813 | + | ||
| 2493 | .rank-name { | 2814 | .rank-name { |
| 2494 | flex: 1; | 2815 | flex: 1; |
| 2495 | color: #606266; | 2816 | color: #606266; |
| 2496 | font-size: 14px; | 2817 | font-size: 14px; |
| 2818 | + transition: color 0.3s; | ||
| 2819 | + } | ||
| 2820 | + | ||
| 2821 | + &:hover .rank-name { | ||
| 2822 | + color: #303133; | ||
| 2823 | + font-weight: 500; | ||
| 2497 | } | 2824 | } |
| 2498 | 2825 | ||
| 2499 | .rank-val { | 2826 | .rank-val { |
| 2500 | font-weight: 600; | 2827 | font-weight: 600; |
| 2501 | color: #303133; | 2828 | color: #303133; |
| 2502 | font-size: 14px; | 2829 | font-size: 14px; |
| 2830 | + background: linear-gradient(135deg, #303133 0%, #606266 100%); | ||
| 2831 | + -webkit-background-clip: text; | ||
| 2832 | + -webkit-text-fill-color: transparent; | ||
| 2833 | + background-clip: text; | ||
| 2503 | } | 2834 | } |
| 2504 | } | 2835 | } |
| 2505 | } | 2836 | } |
| @@ -2522,12 +2853,66 @@ export default { | @@ -2522,12 +2853,66 @@ export default { | ||
| 2522 | } | 2853 | } |
| 2523 | } | 2854 | } |
| 2524 | 2855 | ||
| 2856 | + /* Insight Row */ | ||
| 2857 | + .insight-row { | ||
| 2858 | + .dashboard-card { | ||
| 2859 | + height: 400px; | ||
| 2860 | + display: flex; | ||
| 2861 | + flex-direction: column; | ||
| 2862 | + | ||
| 2863 | + &::v-deep .el-card__body { | ||
| 2864 | + flex: 1; | ||
| 2865 | + display: flex; | ||
| 2866 | + flex-direction: column; | ||
| 2867 | + overflow: hidden; | ||
| 2868 | + min-height: 0; | ||
| 2869 | + padding: 16px 20px 12px 20px; | ||
| 2870 | + } | ||
| 2871 | + | ||
| 2872 | + .item-rank { | ||
| 2873 | + flex: 1; | ||
| 2874 | + overflow-y: auto; | ||
| 2875 | + min-height: 0; | ||
| 2876 | + padding-right: 4px; | ||
| 2877 | + | ||
| 2878 | + &::-webkit-scrollbar { | ||
| 2879 | + width: 6px; | ||
| 2880 | + } | ||
| 2881 | + | ||
| 2882 | + &::-webkit-scrollbar-track { | ||
| 2883 | + background: rgba(240, 242, 245, 0.5); | ||
| 2884 | + border-radius: 3px; | ||
| 2885 | + } | ||
| 2886 | + | ||
| 2887 | + &::-webkit-scrollbar-thumb { | ||
| 2888 | + background: linear-gradient(135deg, #c0c4cc 0%, #909399 100%); | ||
| 2889 | + border-radius: 3px; | ||
| 2890 | + transition: background 0.3s; | ||
| 2891 | + | ||
| 2892 | + &:hover { | ||
| 2893 | + background: linear-gradient(135deg, #909399 0%, #606266 100%); | ||
| 2894 | + } | ||
| 2895 | + } | ||
| 2896 | + } | ||
| 2897 | + } | ||
| 2898 | + } | ||
| 2899 | + | ||
| 2525 | /* Item Rank */ | 2900 | /* Item Rank */ |
| 2526 | .item-rank { | 2901 | .item-rank { |
| 2527 | .item-rank-row { | 2902 | .item-rank-row { |
| 2528 | display: flex; | 2903 | display: flex; |
| 2529 | align-items: center; | 2904 | align-items: center; |
| 2530 | - margin-bottom: 12px; | 2905 | + margin-bottom: 5px; |
| 2906 | + padding: 3px 8px; | ||
| 2907 | + border-radius: 6px; | ||
| 2908 | + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); | ||
| 2909 | + border: 1px solid transparent; | ||
| 2910 | + | ||
| 2911 | + &:hover { | ||
| 2912 | + background: linear-gradient(90deg, rgba(64, 158, 255, 0.05) 0%, rgba(64, 158, 255, 0.02) 100%); | ||
| 2913 | + transform: translateX(4px); | ||
| 2914 | + border-color: rgba(64, 158, 255, 0.15); | ||
| 2915 | + } | ||
| 2531 | 2916 | ||
| 2532 | .item-index { | 2917 | .item-index { |
| 2533 | font-weight: bold; | 2918 | font-weight: bold; |
| @@ -2536,6 +2921,11 @@ export default { | @@ -2536,6 +2921,11 @@ export default { | ||
| 2536 | font-style: italic; | 2921 | font-style: italic; |
| 2537 | flex-shrink: 0; | 2922 | flex-shrink: 0; |
| 2538 | width: 20px; | 2923 | width: 20px; |
| 2924 | + transition: color 0.3s; | ||
| 2925 | + } | ||
| 2926 | + | ||
| 2927 | + &:hover .item-index { | ||
| 2928 | + color: #909399; | ||
| 2539 | } | 2929 | } |
| 2540 | 2930 | ||
| 2541 | .item-name { | 2931 | .item-name { |
| @@ -2549,6 +2939,12 @@ export default { | @@ -2549,6 +2939,12 @@ export default { | ||
| 2549 | overflow: hidden; | 2939 | overflow: hidden; |
| 2550 | text-overflow: ellipsis; | 2940 | text-overflow: ellipsis; |
| 2551 | white-space: nowrap; | 2941 | white-space: nowrap; |
| 2942 | + transition: color 0.3s; | ||
| 2943 | + } | ||
| 2944 | + | ||
| 2945 | + &:hover .item-name { | ||
| 2946 | + color: #303133; | ||
| 2947 | + font-weight: 500; | ||
| 2552 | } | 2948 | } |
| 2553 | 2949 | ||
| 2554 | &::v-deep .el-progress { | 2950 | &::v-deep .el-progress { |
| @@ -2557,7 +2953,13 @@ export default { | @@ -2557,7 +2953,13 @@ export default { | ||
| 2557 | } | 2953 | } |
| 2558 | 2954 | ||
| 2559 | &::v-deep .el-progress-bar__outer { | 2955 | &::v-deep .el-progress-bar__outer { |
| 2560 | - background-color: #F2F6FC; | 2956 | + background: linear-gradient(90deg, #F2F6FC 0%, #E4E7ED 100%); |
| 2957 | + border-radius: 10px; | ||
| 2958 | + overflow: hidden; | ||
| 2959 | + } | ||
| 2960 | + | ||
| 2961 | + &::v-deep .el-progress-bar__inner { | ||
| 2962 | + border-radius: 10px; | ||
| 2561 | } | 2963 | } |
| 2562 | 2964 | ||
| 2563 | .item-count { | 2965 | .item-count { |
| @@ -2568,6 +2970,10 @@ export default { | @@ -2568,6 +2970,10 @@ export default { | ||
| 2568 | white-space: nowrap; | 2970 | white-space: nowrap; |
| 2569 | min-width: 60px; | 2971 | min-width: 60px; |
| 2570 | text-align: right; | 2972 | text-align: right; |
| 2973 | + background: linear-gradient(135deg, #303133 0%, #606266 100%); | ||
| 2974 | + -webkit-background-clip: text; | ||
| 2975 | + -webkit-text-fill-color: transparent; | ||
| 2976 | + background-clip: text; | ||
| 2571 | } | 2977 | } |
| 2572 | } | 2978 | } |
| 2573 | } | 2979 | } |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKhxx/LqKhxxExportOutput.cs
| @@ -35,11 +35,6 @@ namespace NCC.Extend.Entitys.Dto.LqKhxx | @@ -35,11 +35,6 @@ namespace NCC.Extend.Entitys.Dto.LqKhxx | ||
| 35 | public string xb { get; set; } | 35 | public string xb { get; set; } |
| 36 | 36 | ||
| 37 | /// <summary> | 37 | /// <summary> |
| 38 | - /// 客户目前归属名称 | ||
| 39 | - /// </summary> | ||
| 40 | - public string khmqgsName { get; set; } | ||
| 41 | - | ||
| 42 | - /// <summary> | ||
| 43 | /// 归属门店名称 | 38 | /// 归属门店名称 |
| 44 | /// </summary> | 39 | /// </summary> |
| 45 | public string gsmdName { get; set; } | 40 | public string gsmdName { get; set; } |
| @@ -55,19 +50,24 @@ namespace NCC.Extend.Entitys.Dto.LqKhxx | @@ -55,19 +50,24 @@ namespace NCC.Extend.Entitys.Dto.LqKhxx | ||
| 55 | public string khlxName { get; set; } | 50 | public string khlxName { get; set; } |
| 56 | 51 | ||
| 57 | /// <summary> | 52 | /// <summary> |
| 58 | - /// 客户阶段 | 53 | + /// 主健康师名称 |
| 54 | + /// </summary> | ||
| 55 | + public string mainHealthUserName { get; set; } | ||
| 56 | + | ||
| 57 | + /// <summary> | ||
| 58 | + /// 副健康师名称 | ||
| 59 | /// </summary> | 59 | /// </summary> |
| 60 | - public string khjd { get; set; } | 60 | + public string subHealthUserName { get; set; } |
| 61 | 61 | ||
| 62 | /// <summary> | 62 | /// <summary> |
| 63 | - /// 客户消费 | 63 | + /// 拓客人员名称 |
| 64 | /// </summary> | 64 | /// </summary> |
| 65 | - public string khxf { get; set; } | 65 | + public string expandUserName { get; set; } |
| 66 | 66 | ||
| 67 | /// <summary> | 67 | /// <summary> |
| 68 | - /// 消费频次 | 68 | + /// 消费等级名称(D、C、B、A、A+、A++) |
| 69 | /// </summary> | 69 | /// </summary> |
| 70 | - public string xfpc { get; set; } | 70 | + public string consumeLevelName { get; set; } |
| 71 | 71 | ||
| 72 | /// <summary> | 72 | /// <summary> |
| 73 | /// 推荐人 | 73 | /// 推荐人 |
netcore/src/Modularity/Extend/NCC.Extend/LqKhxxService.cs
| @@ -796,8 +796,86 @@ namespace NCC.Extend.LqKhxx | @@ -796,8 +796,86 @@ namespace NCC.Extend.LqKhxx | ||
| 796 | } | 796 | } |
| 797 | } | 797 | } |
| 798 | 798 | ||
| 799 | + // 批量查询主健康师信息 | ||
| 800 | + var mainHealthUserIds = customerList | ||
| 801 | + .Where(c => !string.IsNullOrEmpty(c.MainHealthUser)) | ||
| 802 | + .Select(c => c.MainHealthUser) | ||
| 803 | + .Distinct() | ||
| 804 | + .Where(id => !string.IsNullOrEmpty(id)) | ||
| 805 | + .ToList(); | ||
| 806 | + var mainHealthUserDict = new Dictionary<string, string>(); | ||
| 807 | + if (mainHealthUserIds != null && mainHealthUserIds.Any()) | ||
| 808 | + { | ||
| 809 | + var mainHealthUsers = await _db.Queryable<UserEntity>() | ||
| 810 | + .Where(u => mainHealthUserIds.Contains(u.Id) && !string.IsNullOrEmpty(u.Id)) | ||
| 811 | + .Select(u => new { u.Id, u.RealName }) | ||
| 812 | + .ToListAsync(); | ||
| 813 | + if (mainHealthUsers != null && mainHealthUsers.Any()) | ||
| 814 | + { | ||
| 815 | + foreach (var user in mainHealthUsers) | ||
| 816 | + { | ||
| 817 | + if (!string.IsNullOrEmpty(user.Id) && !mainHealthUserDict.ContainsKey(user.Id)) | ||
| 818 | + { | ||
| 819 | + mainHealthUserDict[user.Id] = user.RealName ?? ""; | ||
| 820 | + } | ||
| 821 | + } | ||
| 822 | + } | ||
| 823 | + } | ||
| 824 | + | ||
| 825 | + // 批量查询副健康师信息 | ||
| 826 | + var subHealthUserIds = customerList | ||
| 827 | + .Where(c => !string.IsNullOrEmpty(c.SubHealthUser)) | ||
| 828 | + .Select(c => c.SubHealthUser) | ||
| 829 | + .Distinct() | ||
| 830 | + .Where(id => !string.IsNullOrEmpty(id)) | ||
| 831 | + .ToList(); | ||
| 832 | + var subHealthUserDict = new Dictionary<string, string>(); | ||
| 833 | + if (subHealthUserIds != null && subHealthUserIds.Any()) | ||
| 834 | + { | ||
| 835 | + var subHealthUsers = await _db.Queryable<UserEntity>() | ||
| 836 | + .Where(u => subHealthUserIds.Contains(u.Id) && !string.IsNullOrEmpty(u.Id)) | ||
| 837 | + .Select(u => new { u.Id, u.RealName }) | ||
| 838 | + .ToListAsync(); | ||
| 839 | + if (subHealthUsers != null && subHealthUsers.Any()) | ||
| 840 | + { | ||
| 841 | + foreach (var user in subHealthUsers) | ||
| 842 | + { | ||
| 843 | + if (!string.IsNullOrEmpty(user.Id) && !subHealthUserDict.ContainsKey(user.Id)) | ||
| 844 | + { | ||
| 845 | + subHealthUserDict[user.Id] = user.RealName ?? ""; | ||
| 846 | + } | ||
| 847 | + } | ||
| 848 | + } | ||
| 849 | + } | ||
| 850 | + | ||
| 851 | + // 批量查询拓客人员信息 | ||
| 852 | + var expandUserIds = customerList | ||
| 853 | + .Where(c => !string.IsNullOrEmpty(c.ExpandUser)) | ||
| 854 | + .Select(c => c.ExpandUser) | ||
| 855 | + .Distinct() | ||
| 856 | + .Where(id => !string.IsNullOrEmpty(id)) | ||
| 857 | + .ToList(); | ||
| 858 | + var expandUserDict = new Dictionary<string, string>(); | ||
| 859 | + if (expandUserIds != null && expandUserIds.Any()) | ||
| 860 | + { | ||
| 861 | + var expandUsers = await _db.Queryable<UserEntity>() | ||
| 862 | + .Where(u => expandUserIds.Contains(u.Id) && !string.IsNullOrEmpty(u.Id)) | ||
| 863 | + .Select(u => new { u.Id, u.RealName }) | ||
| 864 | + .ToListAsync(); | ||
| 865 | + if (expandUsers != null && expandUsers.Any()) | ||
| 866 | + { | ||
| 867 | + foreach (var user in expandUsers) | ||
| 868 | + { | ||
| 869 | + if (!string.IsNullOrEmpty(user.Id) && !expandUserDict.ContainsKey(user.Id)) | ||
| 870 | + { | ||
| 871 | + expandUserDict[user.Id] = user.RealName ?? ""; | ||
| 872 | + } | ||
| 873 | + } | ||
| 874 | + } | ||
| 875 | + } | ||
| 876 | + | ||
| 799 | // 转换为导出DTO | 877 | // 转换为导出DTO |
| 800 | - var queryResult = customerList.Select(kh => new | 878 | + var exportData = customerList.Select(kh => new LqKhxxExportOutput |
| 801 | { | 879 | { |
| 802 | id = kh.Id, | 880 | id = kh.Id, |
| 803 | khmc = kh.Khmc, | 881 | khmc = kh.Khmc, |
| @@ -806,10 +884,11 @@ namespace NCC.Extend.LqKhxx | @@ -806,10 +884,11 @@ namespace NCC.Extend.LqKhxx | ||
| 806 | xb = kh.Xb, | 884 | xb = kh.Xb, |
| 807 | gsmdName = (!string.IsNullOrEmpty(kh.Gsmd) && storeDict.ContainsKey(kh.Gsmd)) ? (storeDict[kh.Gsmd].Dm ?? "") : "", | 885 | gsmdName = (!string.IsNullOrEmpty(kh.Gsmd) && storeDict.ContainsKey(kh.Gsmd)) ? (storeDict[kh.Gsmd].Dm ?? "") : "", |
| 808 | zcsj = kh.Zcsj, | 886 | zcsj = kh.Zcsj, |
| 809 | - khlx = kh.Khlx, | ||
| 810 | - khjd = kh.Khjd, | ||
| 811 | - khxf = kh.Khxf, | ||
| 812 | - xfpc = kh.Xfpc, | 887 | + khlxName = GetMemberTypeName(kh.Khlx), |
| 888 | + mainHealthUserName = (!string.IsNullOrEmpty(kh.MainHealthUser) && mainHealthUserDict.ContainsKey(kh.MainHealthUser)) ? mainHealthUserDict[kh.MainHealthUser] : "", | ||
| 889 | + subHealthUserName = (!string.IsNullOrEmpty(kh.SubHealthUser) && subHealthUserDict.ContainsKey(kh.SubHealthUser)) ? subHealthUserDict[kh.SubHealthUser] : "", | ||
| 890 | + expandUserName = (!string.IsNullOrEmpty(kh.ExpandUser) && expandUserDict.ContainsKey(kh.ExpandUser)) ? expandUserDict[kh.ExpandUser] : "", | ||
| 891 | + consumeLevelName = GetConsumeLevelNameFromLevel(kh.ConsumeLevel), | ||
| 813 | tjrName = (!string.IsNullOrEmpty(kh.Tjr) && tjrDict.ContainsKey(kh.Tjr)) ? tjrDict[kh.Tjr] : "", | 892 | tjrName = (!string.IsNullOrEmpty(kh.Tjr) && tjrDict.ContainsKey(kh.Tjr)) ? tjrDict[kh.Tjr] : "", |
| 814 | jdqd = kh.Jdqd, | 893 | jdqd = kh.Jdqd, |
| 815 | lxdz = kh.Lxdz, | 894 | lxdz = kh.Lxdz, |
| @@ -820,40 +899,7 @@ namespace NCC.Extend.LqKhxx | @@ -820,40 +899,7 @@ namespace NCC.Extend.LqKhxx | ||
| 820 | visitDays = kh.VisitDays, | 899 | visitDays = kh.VisitDays, |
| 821 | sleepDays = kh.SleepDays, | 900 | sleepDays = kh.SleepDays, |
| 822 | totalBillingAmount = kh.TotalBillingAmount, | 901 | totalBillingAmount = kh.TotalBillingAmount, |
| 823 | - remainingRightsAmount = kh.RemainingRightsAmount, | ||
| 824 | - // 门店归属信息,用于计算客户目前归属名称 | ||
| 825 | - syb = (!string.IsNullOrEmpty(kh.Gsmd) && storeDict.ContainsKey(kh.Gsmd)) ? (storeDict[kh.Gsmd].Syb ?? "") : "", | ||
| 826 | - jyb = (!string.IsNullOrEmpty(kh.Gsmd) && storeDict.ContainsKey(kh.Gsmd)) ? (storeDict[kh.Gsmd].Jyb ?? "") : "", | ||
| 827 | - kjb = (!string.IsNullOrEmpty(kh.Gsmd) && storeDict.ContainsKey(kh.Gsmd)) ? (storeDict[kh.Gsmd].Kjb ?? "") : "", | ||
| 828 | - dxmb = (!string.IsNullOrEmpty(kh.Gsmd) && storeDict.ContainsKey(kh.Gsmd)) ? (storeDict[kh.Gsmd].Dxmb ?? "") : "" | ||
| 829 | - }).ToList(); | ||
| 830 | - | ||
| 831 | - // 转换为导出DTO,并计算客户类型名称和客户目前归属名称 | ||
| 832 | - var exportData = queryResult.Select(item => new LqKhxxExportOutput | ||
| 833 | - { | ||
| 834 | - id = item.id, | ||
| 835 | - khmc = item.khmc, | ||
| 836 | - sjh = item.sjh, | ||
| 837 | - dah = item.dah, | ||
| 838 | - xb = item.xb, | ||
| 839 | - gsmdName = item.gsmdName, | ||
| 840 | - zcsj = item.zcsj, | ||
| 841 | - khlxName = GetMemberTypeName(item.khlx), | ||
| 842 | - khjd = item.khjd, | ||
| 843 | - khxf = item.khxf, | ||
| 844 | - xfpc = item.xfpc, | ||
| 845 | - tjrName = item.tjrName, | ||
| 846 | - jdqd = item.jdqd, | ||
| 847 | - lxdz = item.lxdz, | ||
| 848 | - bz = item.bz, | ||
| 849 | - yanglsr = item.yanglsr, | ||
| 850 | - firstVisitTime = item.firstVisitTime, | ||
| 851 | - lastVisitTime = item.lastVisitTime, | ||
| 852 | - visitDays = item.visitDays, | ||
| 853 | - sleepDays = item.sleepDays, | ||
| 854 | - totalBillingAmount = item.totalBillingAmount, | ||
| 855 | - remainingRightsAmount = item.remainingRightsAmount, | ||
| 856 | - khmqgsName = GetCustomerBelongName(item.syb, item.jyb, item.kjb, item.dxmb) | 902 | + remainingRightsAmount = kh.RemainingRightsAmount |
| 857 | }).ToList(); | 903 | }).ToList(); |
| 858 | 904 | ||
| 859 | // 获取客户类型名称的辅助方法 | 905 | // 获取客户类型名称的辅助方法 |
| @@ -867,15 +913,12 @@ namespace NCC.Extend.LqKhxx | @@ -867,15 +913,12 @@ namespace NCC.Extend.LqKhxx | ||
| 867 | return "无"; | 913 | return "无"; |
| 868 | } | 914 | } |
| 869 | 915 | ||
| 870 | - // 获取客户目前归属名称的辅助方法 | ||
| 871 | - string GetCustomerBelongName(string syb, string jyb, string kjb, string dxmb) | 916 | + // 根据消费等级编号获取消费等级名称 |
| 917 | + string GetConsumeLevelNameFromLevel(int level) | ||
| 872 | { | 918 | { |
| 873 | - var belongList = new List<string>(); | ||
| 874 | - if (!string.IsNullOrEmpty(syb)) belongList.Add("事业部"); | ||
| 875 | - if (!string.IsNullOrEmpty(jyb)) belongList.Add("教育部"); | ||
| 876 | - if (!string.IsNullOrEmpty(kjb)) belongList.Add("科技部"); | ||
| 877 | - if (!string.IsNullOrEmpty(dxmb)) belongList.Add("大项目部"); | ||
| 878 | - return belongList.Count > 0 ? string.Join("、", belongList) : "无"; | 919 | + return MemberInfoUpdateConfig.ConsumeLevelNames.ContainsKey(level) |
| 920 | + ? MemberInfoUpdateConfig.ConsumeLevelNames[level] | ||
| 921 | + : "D"; | ||
| 879 | } | 922 | } |
| 880 | 923 | ||
| 881 | // 定义导出字段映射 | 924 | // 定义导出字段映射 |
| @@ -886,13 +929,13 @@ namespace NCC.Extend.LqKhxx | @@ -886,13 +929,13 @@ namespace NCC.Extend.LqKhxx | ||
| 886 | new ParamsModel { value = "手机号", field = "sjh" }, | 929 | new ParamsModel { value = "手机号", field = "sjh" }, |
| 887 | new ParamsModel { value = "档案号", field = "dah" }, | 930 | new ParamsModel { value = "档案号", field = "dah" }, |
| 888 | new ParamsModel { value = "性别", field = "xb" }, | 931 | new ParamsModel { value = "性别", field = "xb" }, |
| 889 | - new ParamsModel { value = "客户目前归属名称", field = "khmqgsName" }, | ||
| 890 | new ParamsModel { value = "归属门店名称", field = "gsmdName" }, | 932 | new ParamsModel { value = "归属门店名称", field = "gsmdName" }, |
| 891 | new ParamsModel { value = "注册时间", field = "zcsj" }, | 933 | new ParamsModel { value = "注册时间", field = "zcsj" }, |
| 892 | - new ParamsModel { value = "客户类型名称", field = "khlxName" }, | ||
| 893 | - new ParamsModel { value = "客户阶段", field = "khjd" }, | ||
| 894 | - new ParamsModel { value = "客户消费", field = "khxf" }, | ||
| 895 | - new ParamsModel { value = "消费频次", field = "xfpc" }, | 934 | + new ParamsModel { value = "客户类型", field = "khlxName" }, |
| 935 | + new ParamsModel { value = "主健康师", field = "mainHealthUserName" }, | ||
| 936 | + new ParamsModel { value = "副健康师", field = "subHealthUserName" }, | ||
| 937 | + new ParamsModel { value = "拓客人员", field = "expandUserName" }, | ||
| 938 | + new ParamsModel { value = "消费等级", field = "consumeLevelName" }, | ||
| 896 | new ParamsModel { value = "推荐人", field = "tjrName" }, | 939 | new ParamsModel { value = "推荐人", field = "tjrName" }, |
| 897 | new ParamsModel { value = "进店渠道", field = "jdqd" }, | 940 | new ParamsModel { value = "进店渠道", field = "jdqd" }, |
| 898 | new ParamsModel { value = "联系地址", field = "lxdz" }, | 941 | new ParamsModel { value = "联系地址", field = "lxdz" }, |