@simplysm/sd-cli 13.0.74 → 13.0.76

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/dist/commands/lint.d.ts +2 -2
  2. package/dist/commands/lint.d.ts.map +1 -1
  3. package/dist/commands/lint.js +0 -94
  4. package/dist/commands/lint.js.map +1 -1
  5. package/package.json +4 -5
  6. package/src/commands/lint.ts +2 -113
  7. package/templates/init/package.json.hbs +2 -3
  8. package/templates/init/packages/client-admin/package.json.hbs +5 -5
  9. package/templates/init/packages/client-admin/src/views/home/base/employee/EmployeeDetail.tsx.hbs +86 -105
  10. package/templates/init/packages/client-admin/src/views/home/base/role-permission/RoleDetail.tsx.hbs +4 -12
  11. package/templates/init/packages/client-admin/src/views/home/base/role-permission/RolePermissionDetail.tsx.hbs +0 -2
  12. package/templates/init/packages/client-admin/src/views/home/base/role-permission/RolePermissionView.tsx +1 -1
  13. package/templates/init/packages/client-admin/src/views/home/my-info/MyInfoDetail.tsx.hbs +36 -43
  14. package/templates/init/packages/db-main/package.json.hbs +2 -2
  15. package/templates/init/packages/server/package.json.hbs +4 -4
  16. package/templates/init/tests/e2e/package.json.hbs +1 -1
  17. package/tests/get-compiler-options-for-package.spec.ts +0 -45
  18. package/tests/get-package-source-files.spec.ts +0 -42
  19. package/tests/get-types-from-package-json.spec.ts +0 -19
  20. package/tests/infra/ResultCollector.spec.ts +0 -9
  21. package/tests/infra/WorkerManager.spec.ts +0 -34
  22. package/tests/load-ignore-patterns.spec.ts +0 -29
  23. package/tests/load-sd-config.spec.ts +0 -39
  24. package/tests/run-lint.spec.ts +0 -53
  25. package/tests/run-typecheck.spec.ts +0 -168
  26. package/tests/run-watch.spec.ts +0 -34
  27. package/tests/sd-cli.spec.ts +0 -88
  28. package/templates/init/stylelint.config.ts +0 -1
@@ -16,9 +16,9 @@ export interface LintOptions {
16
16
  export interface LintResult {
17
17
  /** true if there are no lint errors */
18
18
  success: boolean;
19
- /** Total error count from ESLint + Stylelint */
19
+ /** Total error count from ESLint */
20
20
  errorCount: number;
21
- /** Total warning count from ESLint + Stylelint */
21
+ /** Total warning count from ESLint */
22
22
  warningCount: number;
23
23
  /** Formatter output string (content to write to stdout) */
24
24
  formattedOutput: string;
@@ -1 +1 @@
1
- {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["..\\..\\src\\commands\\lint.ts"],"names":[],"mappings":"AAIA,OAAO,uBAAuB,CAAC;AAO/B;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,6FAA6F;IAC7F,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,sBAAsB;IACtB,GAAG,EAAE,OAAO,CAAC;IACb,2FAA2F;IAC3F,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,eAAe,EAAE,MAAM,CAAC;CACzB;AAoCD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAuCvE;AAgBD;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA8K3E;AAED;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAQjE"}
1
+ {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["..\\..\\src\\commands\\lint.ts"],"names":[],"mappings":"AAIA,OAAO,uBAAuB,CAAC;AAM/B;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,6FAA6F;IAC7F,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,sBAAsB;IACtB,GAAG,EAAE,OAAO,CAAC;IACb,2FAA2F;IAC3F,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,eAAe,EAAE,MAAM,CAAC;CACzB;AA0BD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAuCvE;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAoF3E;AAED;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAQjE"}
@@ -5,21 +5,12 @@ import { fsExists, fsGlob, pathFilterByTargets } from "@simplysm/core-node";
5
5
  import "@simplysm/core-common";
6
6
  import { SdError } from "@simplysm/core-common";
7
7
  import { consola } from "consola";
8
- import stylelint from "stylelint";
9
8
  const ESLINT_CONFIG_FILES = [
10
9
  "eslint.config.ts",
11
10
  "eslint.config.mts",
12
11
  "eslint.config.js",
13
12
  "eslint.config.mjs"
14
13
  ];
15
- const STYLELINT_CONFIG_FILES = [
16
- "stylelint.config.ts",
17
- "stylelint.config.mts",
18
- "stylelint.config.js",
19
- "stylelint.config.mjs",
20
- ".stylelintrc.json",
21
- ".stylelintrc.yml"
22
- ];
23
14
  function isGlobalIgnoresConfig(item) {
24
15
  if (item == null || typeof item !== "object") return false;
25
16
  if (!("ignores" in item)) return false;
@@ -59,12 +50,6 @@ async function loadIgnorePatterns(cwd) {
59
50
  }
60
51
  return configs.filter(isGlobalIgnoresConfig).flatMap((item) => item.ignores);
61
52
  }
62
- async function hasStylelintConfig(cwd) {
63
- for (const f of STYLELINT_CONFIG_FILES) {
64
- if (await fsExists(path.join(cwd, f))) return true;
65
- }
66
- return false;
67
- }
68
53
  async function executeLint(options) {
69
54
  const { targets, fix, timing } = options;
70
55
  const cwd = process.cwd();
@@ -105,54 +90,6 @@ async function executeLint(options) {
105
90
  logger.debug("auto-fix applied");
106
91
  }
107
92
  }
108
- const hasStylelintCfg = await hasStylelintConfig(cwd);
109
- let stylelintResult;
110
- if (hasStylelintCfg) {
111
- logger.start("collecting CSS files");
112
- let cssFiles = await fsGlob("**/*.css", {
113
- cwd,
114
- ignore: ignorePatterns,
115
- nodir: true,
116
- absolute: true
117
- });
118
- cssFiles = pathFilterByTargets(cssFiles, targets, cwd);
119
- logger.success(`collected CSS files (${cssFiles.length} files)`);
120
- if (cssFiles.length > 0) {
121
- logger.start(`running Stylelint... (${cssFiles.length} files)`);
122
- let configFile;
123
- for (const f of STYLELINT_CONFIG_FILES) {
124
- const configPath = path.join(cwd, f);
125
- if (await fsExists(configPath)) {
126
- configFile = configPath;
127
- break;
128
- }
129
- }
130
- let stylelintOptions;
131
- if (configFile != null && /\.ts$/.test(configFile)) {
132
- const jiti = createJiti(import.meta.url);
133
- const configModule = await jiti.import(configFile);
134
- const config = configModule.default;
135
- stylelintOptions = {
136
- files: cssFiles,
137
- config,
138
- configBasedir: cwd,
139
- fix,
140
- cache: true,
141
- cacheLocation: path.join(cwd, ".cache", "stylelint.cache")
142
- };
143
- } else {
144
- stylelintOptions = {
145
- files: cssFiles,
146
- configFile,
147
- fix,
148
- cache: true,
149
- cacheLocation: path.join(cwd, ".cache", "stylelint.cache")
150
- };
151
- }
152
- stylelintResult = await stylelint.lint(stylelintOptions);
153
- logger.success("Stylelint execution complete");
154
- }
155
- }
156
93
  if (files.length === 0 || eslintResults == null || eslint == null) {
157
94
  logger.info("no files to lint");
158
95
  return { success: true, errorCount: 0, warningCount: 0, formattedOutput: "" };
@@ -172,37 +109,6 @@ async function executeLint(options) {
172
109
  if (resultText) {
173
110
  formattedOutput += resultText;
174
111
  }
175
- if (stylelintResult != null && stylelintResult.results.length > 0) {
176
- const stylelintErrorCount = stylelintResult.results.sum(
177
- (r) => r.warnings.filter((w) => w.severity === "error").length
178
- );
179
- const stylelintWarningCount = stylelintResult.results.sum(
180
- (r) => r.warnings.filter((w) => w.severity === "warning").length
181
- );
182
- errorCount += stylelintErrorCount;
183
- warningCount += stylelintWarningCount;
184
- if (stylelintErrorCount > 0) {
185
- logger.error("Stylelint errors occurred", {
186
- errorCount: stylelintErrorCount,
187
- warningCount: stylelintWarningCount
188
- });
189
- } else if (stylelintWarningCount > 0) {
190
- logger.info("Stylelint complete (warnings present)", {
191
- errorCount: stylelintErrorCount,
192
- warningCount: stylelintWarningCount
193
- });
194
- } else {
195
- logger.info("Stylelint complete", {
196
- errorCount: stylelintErrorCount,
197
- warningCount: stylelintWarningCount
198
- });
199
- }
200
- const stylelintFormatter = await stylelint.formatters.string;
201
- const stylelintOutput = stylelintFormatter(stylelintResult.results, stylelintResult);
202
- if (stylelintOutput) {
203
- formattedOutput += stylelintOutput;
204
- }
205
- }
206
112
  return {
207
113
  success: errorCount === 0,
208
114
  errorCount,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/commands/lint.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/sd-cli",
3
- "version": "13.0.74",
3
+ "version": "13.0.76",
4
4
  "description": "Simplysm package - CLI tool",
5
5
  "author": "simplysm",
6
6
  "license": "Apache-2.0",
@@ -34,7 +34,6 @@
34
34
  "sharp": "^0.34.5",
35
35
  "solid-js": "^1.9.11",
36
36
  "ssh2": "^1.17.0",
37
- "stylelint": "^16.26.1",
38
37
  "tailwindcss": "^3.4.19",
39
38
  "ts-morph": "^27.0.2",
40
39
  "typescript": "^5.9.3",
@@ -43,9 +42,9 @@
43
42
  "vite-plugin-solid": "^2.11.10",
44
43
  "vite-tsconfig-paths": "^6.1.1",
45
44
  "yargs": "^18.0.0",
46
- "@simplysm/storage": "13.0.74",
47
- "@simplysm/core-node": "13.0.74",
48
- "@simplysm/core-common": "13.0.74"
45
+ "@simplysm/core-common": "13.0.76",
46
+ "@simplysm/core-node": "13.0.76",
47
+ "@simplysm/storage": "13.0.76"
49
48
  },
50
49
  "devDependencies": {
51
50
  "@types/semver": "^7.7.1",
@@ -5,7 +5,6 @@ import { fsExists, fsGlob, pathFilterByTargets } from "@simplysm/core-node";
5
5
  import "@simplysm/core-common";
6
6
  import { SdError } from "@simplysm/core-common";
7
7
  import { consola } from "consola";
8
- import stylelint from "stylelint";
9
8
 
10
9
  //#region Types
11
10
 
@@ -27,9 +26,9 @@ export interface LintOptions {
27
26
  export interface LintResult {
28
27
  /** true if there are no lint errors */
29
28
  success: boolean;
30
- /** Total error count from ESLint + Stylelint */
29
+ /** Total error count from ESLint */
31
30
  errorCount: number;
32
- /** Total warning count from ESLint + Stylelint */
31
+ /** Total warning count from ESLint */
33
32
  warningCount: number;
34
33
  /** Formatter output string (content to write to stdout) */
35
34
  formattedOutput: string;
@@ -47,16 +46,6 @@ const ESLINT_CONFIG_FILES = [
47
46
  "eslint.config.mjs",
48
47
  ] as const;
49
48
 
50
- /** Stylelint config file search order */
51
- const STYLELINT_CONFIG_FILES = [
52
- "stylelint.config.ts",
53
- "stylelint.config.mts",
54
- "stylelint.config.js",
55
- "stylelint.config.mjs",
56
- ".stylelintrc.json",
57
- ".stylelintrc.yml",
58
- ] as const;
59
-
60
49
  /**
61
50
  * Type guard to check if an ESLint config object has only ignores property
62
51
  */
@@ -115,16 +104,6 @@ export async function loadIgnorePatterns(cwd: string): Promise<string[]> {
115
104
  return configs.filter(isGlobalIgnoresConfig).flatMap((item) => item.ignores);
116
105
  }
117
106
 
118
- /**
119
- * Check if Stylelint config file exists.
120
- */
121
- async function hasStylelintConfig(cwd: string): Promise<boolean> {
122
- for (const f of STYLELINT_CONFIG_FILES) {
123
- if (await fsExists(path.join(cwd, f))) return true;
124
- }
125
- return false;
126
- }
127
-
128
107
  //#endregion
129
108
 
130
109
  //#region Main
@@ -192,59 +171,6 @@ export async function executeLint(options: LintOptions): Promise<LintResult> {
192
171
  }
193
172
  }
194
173
 
195
- // Stylelint
196
- const hasStylelintCfg = await hasStylelintConfig(cwd);
197
- let stylelintResult: stylelint.LinterResult | undefined;
198
- if (hasStylelintCfg) {
199
- logger.start("collecting CSS files");
200
- let cssFiles = await fsGlob("**/*.css", {
201
- cwd,
202
- ignore: ignorePatterns,
203
- nodir: true,
204
- absolute: true,
205
- });
206
- cssFiles = pathFilterByTargets(cssFiles, targets, cwd);
207
- logger.success(`collected CSS files (${cssFiles.length} files)`);
208
-
209
- if (cssFiles.length > 0) {
210
- logger.start(`running Stylelint... (${cssFiles.length} files)`);
211
- let configFile: string | undefined;
212
- for (const f of STYLELINT_CONFIG_FILES) {
213
- const configPath = path.join(cwd, f);
214
- if (await fsExists(configPath)) {
215
- configFile = configPath;
216
- break;
217
- }
218
- }
219
-
220
- // Support TypeScript config files: load with jiti, pass as config object
221
- let stylelintOptions: stylelint.LinterOptions;
222
- if (configFile != null && /\.ts$/.test(configFile)) {
223
- const jiti = createJiti(import.meta.url);
224
- const configModule = await jiti.import<{ default: stylelint.Config }>(configFile);
225
- const config = configModule.default;
226
- stylelintOptions = {
227
- files: cssFiles,
228
- config,
229
- configBasedir: cwd,
230
- fix,
231
- cache: true,
232
- cacheLocation: path.join(cwd, ".cache", "stylelint.cache"),
233
- };
234
- } else {
235
- stylelintOptions = {
236
- files: cssFiles,
237
- configFile,
238
- fix,
239
- cache: true,
240
- cacheLocation: path.join(cwd, ".cache", "stylelint.cache"),
241
- };
242
- }
243
- stylelintResult = await stylelint.lint(stylelintOptions);
244
- logger.success("Stylelint execution complete");
245
- }
246
- }
247
-
248
174
  // Return success result if no files or lint was not executed
249
175
  if (files.length === 0 || eslintResults == null || eslint == null) {
250
176
  logger.info("no files to lint");
@@ -271,43 +197,6 @@ export async function executeLint(options: LintOptions): Promise<LintResult> {
271
197
  formattedOutput += resultText;
272
198
  }
273
199
 
274
- // Collect Stylelint results
275
- if (stylelintResult != null && stylelintResult.results.length > 0) {
276
- const stylelintErrorCount = stylelintResult.results.sum(
277
- (r) => r.warnings.filter((w) => w.severity === "error").length,
278
- );
279
- const stylelintWarningCount = stylelintResult.results.sum(
280
- (r) => r.warnings.filter((w) => w.severity === "warning").length,
281
- );
282
-
283
- errorCount += stylelintErrorCount;
284
- warningCount += stylelintWarningCount;
285
-
286
- if (stylelintErrorCount > 0) {
287
- logger.error("Stylelint errors occurred", {
288
- errorCount: stylelintErrorCount,
289
- warningCount: stylelintWarningCount,
290
- });
291
- } else if (stylelintWarningCount > 0) {
292
- logger.info("Stylelint complete (warnings present)", {
293
- errorCount: stylelintErrorCount,
294
- warningCount: stylelintWarningCount,
295
- });
296
- } else {
297
- logger.info("Stylelint complete", {
298
- errorCount: stylelintErrorCount,
299
- warningCount: stylelintWarningCount,
300
- });
301
- }
302
-
303
- // Stylelint formatter output
304
- const stylelintFormatter = await stylelint.formatters.string;
305
- const stylelintOutput = stylelintFormatter(stylelintResult.results, stylelintResult);
306
- if (stylelintOutput) {
307
- formattedOutput += stylelintOutput;
308
- }
309
- }
310
-
311
200
  return {
312
201
  success: errorCount === 0,
313
202
  errorCount,
@@ -17,12 +17,11 @@
17
17
  "vitest": "vitest"
18
18
  },
19
19
  "devDependencies": {
20
- "@simplysm/lint": "~13.0.74",
21
- "@simplysm/sd-cli": "~13.0.74",
20
+ "@simplysm/lint": "~13.0.76",
21
+ "@simplysm/sd-cli": "~13.0.76",
22
22
  "@types/node": "^20.19.35",
23
23
  "eslint": "^9.39.3",
24
24
  "prettier": "^3.8.1",
25
- "stylelint": "^16.26.1",
26
25
  "typescript": "^5.9.3",
27
26
  "vite-tsconfig-paths": "^6.1.1",
28
27
  "vitest": "^4.0.18"
@@ -6,12 +6,12 @@
6
6
  "private": true,
7
7
  "dependencies": {
8
8
  "@{{projectName}}/db-main": "workspace:*",
9
- "@simplysm/core-browser": "~13.0.74",
10
- "@simplysm/core-common": "~13.0.74",
9
+ "@simplysm/core-browser": "~13.0.76",
10
+ "@simplysm/core-common": "~13.0.76",
11
11
  "@simplysm/excel": "^13.0.71",
12
- "@simplysm/orm-common": "~13.0.74",
13
- "@simplysm/service-client": "~13.0.74",
14
- "@simplysm/solid": "~13.0.74",
12
+ "@simplysm/orm-common": "~13.0.76",
13
+ "@simplysm/service-client": "~13.0.76",
14
+ "@simplysm/solid": "~13.0.76",
15
15
  "@solid-primitives/event-listener": "^2.4.5",
16
16
  "@solidjs/router": "^0.15.4",
17
17
  "@tabler/icons-solidjs": "^3.37.1",
@@ -53,7 +53,6 @@ export function EmployeeDetail(props: { itemId?: number }) {
53
53
  const emp = await db
54
54
  .employee()
55
55
  .joinLastDataLog()
56
- // eslint-disable-next-line solid/reactivity -- 비동기 콜백 내부
57
56
  .where((c) => [expr.eq(c.id, props.itemId)])
58
57
  .select((c) => ({
59
58
  name: c.name,
@@ -124,64 +123,56 @@ export function EmployeeDetail(props: { itemId?: number }) {
124
123
  <section class={"flex flex-col gap-2"}>
125
124
  <h3 class="font-bold text-base-400">직원정보</h3>
126
125
  <FormTable>
127
- <tbody>
128
- <tr>
129
- <th>이름</th>
130
- <td>
131
- <TextInput
132
- required
133
- disabled={!perms().edit}
134
- value={ctx.data.name ?? ""}
135
- onValueChange={(v) => ctx.setData("name", v)}
136
- />
137
- </td>
138
- <th>이메일</th>
139
- <td>
140
- <TextInput
141
- type="email"
142
- disabled={!perms().edit}
143
- value={ctx.data.email ?? ""}
144
- onValueChange={(v) => ctx.setData("email", v)}
145
- />
146
- </td>
147
- </tr>
148
- <tr>
149
- <th>전화번호</th>
150
- <td>
151
- <TextInput
152
- disabled={!perms().edit}
153
- value={ctx.data.phoneNumber ?? ""}
154
- onValueChange={(v) => ctx.setData("phoneNumber", v)}
155
- />
156
- </td>
157
- <th>생년월일</th>
158
- <td>
159
- <DatePicker
160
- disabled={!perms().edit}
161
- value={ctx.data.birthDate}
162
- onValueChange={(v) => ctx.setData("birthDate", v)}
163
- />
164
- </td>
165
- </tr>
166
- <tr>
167
- <th>입사일자</th>
168
- <td>
169
- <DatePicker
170
- disabled={!perms().edit}
171
- value={ctx.data.enteringDate}
172
- onValueChange={(v) => ctx.setData("enteringDate", v)}
173
- />
174
- </td>
175
- <th>퇴사일자</th>
176
- <td>
177
- <DatePicker
178
- disabled={!perms().edit}
179
- value={ctx.data.leavingDate}
180
- onValueChange={(v) => ctx.setData("leavingDate", v)}
181
- />
182
- </td>
183
- </tr>
184
- </tbody>
126
+ <FormTable.Row>
127
+ <FormTable.Item label="이름">
128
+ <TextInput
129
+ required
130
+ disabled={!perms().edit}
131
+ value={ctx.data.name ?? ""}
132
+ onValueChange={(v) => ctx.setData("name", v)}
133
+ />
134
+ </FormTable.Item>
135
+ <FormTable.Item label="이메일">
136
+ <TextInput
137
+ type="email"
138
+ disabled={!perms().edit}
139
+ value={ctx.data.email ?? ""}
140
+ onValueChange={(v) => ctx.setData("email", v)}
141
+ />
142
+ </FormTable.Item>
143
+ </FormTable.Row>
144
+ <FormTable.Row>
145
+ <FormTable.Item label="전화번호">
146
+ <TextInput
147
+ disabled={!perms().edit}
148
+ value={ctx.data.phoneNumber ?? ""}
149
+ onValueChange={(v) => ctx.setData("phoneNumber", v)}
150
+ />
151
+ </FormTable.Item>
152
+ <FormTable.Item label="생년월일">
153
+ <DatePicker
154
+ disabled={!perms().edit}
155
+ value={ctx.data.birthDate}
156
+ onValueChange={(v) => ctx.setData("birthDate", v)}
157
+ />
158
+ </FormTable.Item>
159
+ </FormTable.Row>
160
+ <FormTable.Row>
161
+ <FormTable.Item label="입사일자">
162
+ <DatePicker
163
+ disabled={!perms().edit}
164
+ value={ctx.data.enteringDate}
165
+ onValueChange={(v) => ctx.setData("enteringDate", v)}
166
+ />
167
+ </FormTable.Item>
168
+ <FormTable.Item label="퇴사일자">
169
+ <DatePicker
170
+ disabled={!perms().edit}
171
+ value={ctx.data.leavingDate}
172
+ onValueChange={(v) => ctx.setData("leavingDate", v)}
173
+ />
174
+ </FormTable.Item>
175
+ </FormTable.Row>
185
176
  </FormTable>
186
177
  </section>
187
178
 
@@ -189,19 +180,16 @@ export function EmployeeDetail(props: { itemId?: number }) {
189
180
  <section class={"flex flex-col gap-2"}>
190
181
  <h3 class="font-bold text-base-400">인증정보</h3>
191
182
  <FormTable>
192
- <tbody>
193
- <tr>
194
- <th>비밀번호</th>
195
- <td colSpan={3}>
196
- <TextInput
197
- type="password"
198
- disabled={!perms().authEdit}
199
- value={ctx.data.password ?? ""}
200
- onValueChange={(v) => ctx.setData("password", v)}
201
- />
202
- </td>
203
- </tr>
204
- </tbody>
183
+ <FormTable.Row>
184
+ <FormTable.Item label="비밀번호" colspan={3}>
185
+ <TextInput
186
+ type="password"
187
+ disabled={!perms().authEdit}
188
+ value={ctx.data.password ?? ""}
189
+ onValueChange={(v) => ctx.setData("password", v)}
190
+ />
191
+ </FormTable.Item>
192
+ </FormTable.Row>
205
193
  </FormTable>
206
194
  </section>
207
195
  </Show>
@@ -210,19 +198,16 @@ export function EmployeeDetail(props: { itemId?: number }) {
210
198
  <section class={"flex flex-col gap-2"}>
211
199
  <h3 class="font-bold text-base-400">개인정보</h3>
212
200
  <FormTable>
213
- <tbody>
214
- <tr>
215
- <th>주민번호</th>
216
- <td colSpan={3}>
217
- <TextInput
218
- format="XXXXXX-XXXXXXX"
219
- disabled={!perms().personalEdit}
220
- value={ctx.data.socialSecurityNumber ?? ""}
221
- onValueChange={(v) => ctx.setData("socialSecurityNumber", v)}
222
- />
223
- </td>
224
- </tr>
225
- </tbody>
201
+ <FormTable.Row>
202
+ <FormTable.Item label="주민번호" colspan={3}>
203
+ <TextInput
204
+ format="XXXXXX-XXXXXXX"
205
+ disabled={!perms().personalEdit}
206
+ value={ctx.data.socialSecurityNumber ?? ""}
207
+ onValueChange={(v) => ctx.setData("socialSecurityNumber", v)}
208
+ />
209
+ </FormTable.Item>
210
+ </FormTable.Row>
226
211
  </FormTable>
227
212
  </section>
228
213
  </Show>
@@ -231,26 +216,22 @@ export function EmployeeDetail(props: { itemId?: number }) {
231
216
  <section class={"flex flex-col gap-2"}>
232
217
  <h3 class="font-bold text-base-400">급여정보</h3>
233
218
  <FormTable>
234
- <tbody>
235
- <tr>
236
- <th>계좌은행</th>
237
- <td>
238
- <TextInput
239
- disabled={!perms().payrollEdit}
240
- value={ctx.data.payrollAccountBank ?? ""}
241
- onValueChange={(v) => ctx.setData("payrollAccountBank", v)}
242
- />
243
- </td>
244
- <th>계좌번호</th>
245
- <td>
246
- <TextInput
247
- disabled={!perms().payrollEdit}
248
- value={ctx.data.payrollAccountNumber ?? ""}
249
- onValueChange={(v) => ctx.setData("payrollAccountNumber", v)}
250
- />
251
- </td>
252
- </tr>
253
- </tbody>
219
+ <FormTable.Row>
220
+ <FormTable.Item label="계좌은행">
221
+ <TextInput
222
+ disabled={!perms().payrollEdit}
223
+ value={ctx.data.payrollAccountBank ?? ""}
224
+ onValueChange={(v) => ctx.setData("payrollAccountBank", v)}
225
+ />
226
+ </FormTable.Item>
227
+ <FormTable.Item label="계좌번호">
228
+ <TextInput
229
+ disabled={!perms().payrollEdit}
230
+ value={ctx.data.payrollAccountNumber ?? ""}
231
+ onValueChange={(v) => ctx.setData("payrollAccountNumber", v)}
232
+ />
233
+ </FormTable.Item>
234
+ </FormTable.Row>
254
235
  </FormTable>
255
236
  </section>
256
237
  </Show>