|
37 | 37 | <div class="app-card-grid"> |
38 | 38 |
|
39 | 39 | <div |
40 | | - class="app-card" |
41 | 40 | v-for="item in filteredApps" |
42 | 41 | :key="item.id" |
| 42 | + class="app-card" |
43 | 43 | @click="selectApp(item)" |
44 | 44 | > |
45 | 45 | <!-- 图标 + 标题(横向) --> |
46 | 46 | <div class="card-header"> |
47 | | - <img class="card-icon" :src="item.icon"/> |
| 47 | + <img class="card-icon" :src="item.icon"> |
48 | 48 | <div class="card-title">{{ item.name }}</div> |
49 | 49 | </div> |
50 | 50 |
|
|
55 | 55 |
|
56 | 56 | <!-- 技术图标 --> |
57 | 57 | <div class="card-tech"> |
58 | | - <img v-for="t in item.tech" :src="t" :key="t"/> |
| 58 | + <img v-for="t in item.tech" :key="t" :src="t"> |
59 | 59 | </div> |
60 | 60 |
|
61 | 61 | <!-- NEW 标签 --> |
62 | | - <div class="badge-new" v-if="item.new">新</div> |
| 62 | + <div v-if="item.new" class="badge-new">新</div> |
63 | 63 | </div> |
64 | 64 |
|
65 | 65 | </div> |
66 | 66 |
|
67 | 67 | </div> |
68 | 68 | </template> |
69 | 69 |
|
70 | | - |
71 | 70 | <script> |
72 | 71 | export default { |
73 | | - name: "AppCreatePage", |
| 72 | + name: 'AppCreatePage', |
74 | 73 |
|
75 | 74 | data() { |
76 | 75 | return { |
77 | | - keyword: "", |
78 | | - activeTag: "全部", |
| 76 | + keyword: '', |
| 77 | + activeTag: '全部', |
79 | 78 |
|
80 | | - protocolTags: ["全部", "OIDC", "CAS", "SAML", "OAuth2"], |
| 79 | + protocolTags: ['全部', 'OIDC', 'CAS', 'OAuth2'], |
81 | 80 |
|
82 | 81 | apps: [ |
83 | 82 | { |
84 | 83 | id: 1, |
85 | | - name: "单页应用程序", |
86 | | - desc: "在浏览器中运行应用程序逻辑的 Web 应用程序。", |
87 | | - icon: require("@/assets/img/spa.svg"), |
| 84 | + name: '单页应用程序', |
| 85 | + desc: '在浏览器中运行应用程序逻辑的 Web 应用程序。', |
| 86 | + icon: require('@/assets/img/spa.svg'), |
88 | 87 | tech: [ |
89 | | - require("@/assets/img/react.svg"), |
90 | | - require("@/assets/img/vuejs.svg"), |
91 | | - require("@/assets/img/javascript.svg") |
| 88 | + require('@/assets/img/react.svg'), |
| 89 | + require('@/assets/img/vuejs.svg'), |
| 90 | + require('@/assets/img/javascript.svg') |
92 | 91 | ], |
93 | | - proto: ["OIDC"], |
| 92 | + proto: ['OIDC'] |
94 | 93 | }, |
95 | 94 | { |
96 | 95 | id: 2, |
97 | | - name: "传统 Web 应用程序", |
98 | | - desc: "在服务器端运行应用程序逻辑的 Web 应用程序。", |
99 | | - icon: require("@/assets/img/web.svg"), |
| 96 | + name: '传统 Web 应用程序', |
| 97 | + desc: '在服务器端运行应用程序逻辑的 Web 应用程序。', |
| 98 | + icon: require('@/assets/img/web.svg'), |
100 | 99 | tech: [ |
101 | | - require("@/assets/img/java.svg"), |
102 | | - require("@/assets/img/python.svg"), |
103 | | - require("@/assets/img/go.svg") |
| 100 | + require('@/assets/img/java.svg'), |
| 101 | + require('@/assets/img/python.svg'), |
| 102 | + require('@/assets/img/go.svg') |
104 | 103 | ], |
105 | | - proto: ["OIDC", "SAML"], |
| 104 | + proto: ['OIDC', 'SAML'] |
106 | 105 | }, |
107 | 106 | { |
108 | 107 | id: 3, |
109 | | - name: "移动应用", |
110 | | - desc: "专为移动设备开发的应用程序。", |
111 | | - icon: require("@/assets/img/mobile.svg"), |
| 108 | + name: '移动应用', |
| 109 | + desc: '专为移动设备开发的应用程序。', |
| 110 | + icon: require('@/assets/img/mobile.svg'), |
112 | 111 | tech: [ |
113 | | - require("@/assets/img/android.svg"), |
114 | | - require("@/assets/img/ios.png"), |
115 | | - require("@/assets/img/flutter.svg") |
| 112 | + require('@/assets/img/android.svg'), |
| 113 | + require('@/assets/img/ios.png'), |
| 114 | + require('@/assets/img/flutter.svg') |
116 | 115 | ], |
117 | | - proto: ["OIDC"], |
| 116 | + proto: ['OIDC'] |
118 | 117 | }, |
119 | 118 | { |
120 | 119 | id: 4, |
121 | | - name: "M2M 应用", |
122 | | - desc: "专为机器间通信而设计的应用。", |
123 | | - icon: require("@/assets/img/m2m.svg"), |
| 120 | + name: 'M2M 应用', |
| 121 | + desc: '专为机器间通信而设计的应用。', |
| 122 | + icon: require('@/assets/img/m2m.svg'), |
124 | 123 | tech: [ |
125 | | - require("@/assets/img/oauth.svg"), |
| 124 | + require('@/assets/img/oauth.svg') |
126 | 125 | ], |
127 | | - proto: ["OAuth2"], |
| 126 | + proto: ['OAuth2'] |
128 | 127 | }, |
129 | 128 | { |
130 | 129 | id: 5, |
131 | | - name: "基于标准的应用程序", |
132 | | - desc: "使用标准协议构建的应用。", |
133 | | - icon: require("@/assets/img/std.svg"), |
| 130 | + name: '基于标准的应用程序', |
| 131 | + desc: '使用标准协议构建的应用。', |
| 132 | + icon: require('@/assets/img/std.svg'), |
134 | 133 | tech: [ |
135 | | - require("@/assets/img/oauth.svg"), |
136 | | - require("@/assets/img/openid.png"), |
137 | | - require("@/assets/img/saml.svg"), |
138 | | - require("@/assets/img/cas.png"), |
| 134 | + require('@/assets/img/oauth.svg'), |
| 135 | + require('@/assets/img/openid.png'), |
| 136 | + require('@/assets/img/cas.png') |
139 | 137 | ], |
140 | | - proto: ["SAML", "OIDC", "CAS", "OAuth2"], |
141 | | - }, |
142 | | - ], |
143 | | - }; |
| 138 | + proto: ['OIDC', 'CAS', 'OAuth2'] |
| 139 | + } |
| 140 | + ] |
| 141 | + } |
144 | 142 | }, |
145 | 143 |
|
146 | 144 | computed: { |
147 | 145 | filteredApps() { |
148 | 146 | return this.apps.filter(app => { |
149 | | - const matchKeyword = !this.keyword || app.name.includes(this.keyword); |
| 147 | + const matchKeyword = !this.keyword || app.name.includes(this.keyword) |
150 | 148 |
|
151 | 149 | const matchTag = |
152 | | - this.activeTag === "全部" || app.proto.includes(this.activeTag); |
| 150 | + this.activeTag === '全部' || app.proto.includes(this.activeTag) |
153 | 151 |
|
154 | | - return matchKeyword && matchTag; |
155 | | - }); |
| 152 | + return matchKeyword && matchTag |
| 153 | + }) |
156 | 154 | } |
157 | 155 | }, |
158 | 156 |
|
159 | 157 | methods: { |
160 | 158 | selectTag(tag) { |
161 | | - this.activeTag = tag; |
| 159 | + this.activeTag = tag |
162 | 160 | }, |
163 | 161 |
|
164 | 162 | selectApp(item) { |
165 | | - this.$message.success("选择了:" + item.name); |
| 163 | + this.$message.success('选择了:' + item.name) |
166 | 164 | } |
167 | 165 | } |
168 | | -}; |
| 166 | +} |
169 | 167 | </script> |
170 | 168 |
|
171 | 169 | <style lang="scss" scoped> |
|
0 commit comments