Skip to content

Commit 8832a71

Browse files
committed
fix: #72 get type status need id
1 parent ac38550 commit 8832a71

9 files changed

+125
-124
lines changed

app/Coding/ProjectSetting.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public function getIssueTypes($token, $projectName)
2121
return $result['Response']['IssueTypes'];
2222
}
2323

24-
public function getIssueTypeStatus(string $token, string $projectName, string $issueType)
24+
public function getIssueTypeStatus(string $token, string $projectName, string $issueType, int $issueTypeId)
2525
{
2626
$response = $this->client->request('POST', 'https://e.coding.net/open-api', [
2727
'headers' => [
@@ -33,6 +33,7 @@ public function getIssueTypeStatus(string $token, string $projectName, string $i
3333
'Action' => 'DescribeProjectIssueStatusList',
3434
'ProjectName' => $projectName,
3535
'IssueType' => $issueType,
36+
'IssueTypeId' => $issueTypeId,
3637
],
3738
]);
3839
$result = json_decode($response->getBody(), true);

app/Commands/IssueImportCommand.php

+11-6
Original file line numberDiff line numberDiff line change
@@ -85,16 +85,21 @@ private function getIssueTypes(ProjectSetting $projectSetting, array $row): void
8585
}
8686
}
8787

88-
private function getStatusId(ProjectSetting $projectSetting, string $issueType, string $statusChinese): int
88+
private function getStatusId(ProjectSetting $projectSetting, string $issueTypeName, string $statusName): int
8989
{
90-
if (!isset($this->issueTypeStatus[$issueType])) {
91-
$result = $projectSetting->getIssueTypeStatus($this->codingToken, $this->codingProjectUri, $issueType);
90+
if (!isset($this->issueTypeStatus[$issueTypeName])) {
91+
$type = $this->issueTypes[$issueTypeName]['IssueType'];
92+
$typeId = $this->issueTypes[$issueTypeName]['Id'];
93+
$result = $projectSetting->getIssueTypeStatus($this->codingToken, $this->codingProjectUri, $type, $typeId);
9294
foreach ($result as $item) {
9395
$tmp = $item['IssueStatus'];
94-
$this->issueTypeStatus[$issueType][$tmp['Name']] = $tmp['Id'];
96+
$this->issueTypeStatus[$issueTypeName][$tmp['Name']] = $tmp['Id'];
9597
}
9698
}
97-
return intval($this->issueTypeStatus[$issueType][$statusChinese]);
99+
if (!isset($this->issueTypeStatus[$issueTypeName][$statusName])) {
100+
throw new Exception('' . $statusName . '」不存在,请在设置中添加');
101+
}
102+
return intval($this->issueTypeStatus[$issueTypeName][$statusName]);
98103
}
99104

100105
private function createIssueByRow(ProjectSetting $projectSetting, Issue $issue, Iteration $iteration, array $row)
@@ -127,7 +132,7 @@ private function createIssueByRow(ProjectSetting $projectSetting, Issue $issue,
127132
}
128133
}
129134
if (!empty($row['状态'])) {
130-
$data['StatusId'] = $this->getStatusId($projectSetting, $data['Type'], $row['状态']);
135+
$data['StatusId'] = $this->getStatusId($projectSetting, $row['事项类型'], $row['状态']);
131136
}
132137
$result = $issue->create($this->codingToken, $this->codingProjectUri, $data);
133138
if (isset($row['ID'])) {

app/Commands/ProjectGetIssueTypesCommand.php

-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
namespace App\Commands;
44

5-
use App\Coding\Issue;
65
use App\Coding\ProjectSetting;
76
use LaravelZero\Framework\Commands\Command;
87

tests/Feature/IssueImportCommandTest.php

+6-12
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,8 @@ public function testImportSuccess()
4040
$projectSettingMock->shouldReceive('getIssueTypeStatus')->times(5)->andReturn(
4141
$requirementStatus,
4242
$requirementStatus,
43-
[
44-
['IssueStatus' => ['Id' => 11, 'Name' => '已完成']],
45-
['IssueStatus' => ['Id' => 12, 'Name' => '处理中']],
46-
],
47-
[
48-
['IssueStatus' => ['Id' => 11, 'Name' => '未开始']],
49-
['IssueStatus' => ['Id' => 12, 'Name' => '处理中']],
50-
],
43+
$requirementStatus,
44+
$requirementStatus,
5145
[
5246
['IssueStatus' => ['Id' => 22, 'Name' => '处理中']],
5347
['IssueStatus' => ['Id' => 23, 'Name' => '待处理']],
@@ -125,7 +119,7 @@ public function testImportUserStorySuccess()
125119
'IterationCode' => 2746,
126120
'DueDate' => '2021-10-21',
127121
'StoryPoint' => '2',
128-
'StatusId' => 9,
122+
'StatusId' => 1227037,
129123
]
130124
])->andReturn($result);
131125

@@ -168,7 +162,7 @@ public function testImportSubTask()
168162
'Name' => '用户可通过手机号注册账户',
169163
'DueDate' => '2021-10-21',
170164
'StoryPoint' => '2',
171-
'StatusId' => 9,
165+
'StatusId' => 1227037,
172166
]
173167
])->andReturn($parentIssue);
174168

@@ -183,7 +177,7 @@ public function testImportSubTask()
183177
'Name' => '完成手机号注册的短信验证码发送接口',
184178
'Priority' => "0",
185179
'ParentCode' => 2742,
186-
'StatusId' => 13,
180+
'StatusId' => 1227058,
187181
]
188182
])->andReturn($subTask1);
189183

@@ -198,7 +192,7 @@ public function testImportSubTask()
198192
'Name' => '完成通过手机号注册用户的接口',
199193
'Priority' => "1",
200194
'ParentCode' => 2742,
201-
'StatusId' => 13,
195+
'StatusId' => 1227058,
202196
]
203197
])->andReturn($subTask2);
204198

tests/Unit/CodingProjectSettingTest.php

+3-1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public function testGetIssueTypeStatusSuccess()
4646
$codingProjectUri = $this->faker->slug;
4747

4848
$issueType = $this->faker->randomElement(['DEFECT', 'REQUIREMENT', 'MISSION', 'EPIC', 'SUB_TASK']);
49+
$issueTypeId = $this->faker->randomNumber();
4950
$clientMock = $this->getMockBuilder(Client::class)->getMock();
5051
$clientMock->expects($this->once())
5152
->method('request')
@@ -62,12 +63,13 @@ public function testGetIssueTypeStatusSuccess()
6263
'Action' => 'DescribeProjectIssueStatusList',
6364
'ProjectName' => $codingProjectUri,
6465
'IssueType' => $issueType,
66+
'IssueTypeId' => $issueTypeId,
6567
])
6668
]
6769
)
6870
->willReturn(new Response(200, [], $responseBody));
6971
$coding = new ProjectSetting($clientMock);
70-
$result = $coding->getIssueTypeStatus($codingToken, $codingProjectUri, $issueType);
72+
$result = $coding->getIssueTypeStatus($codingToken, $codingProjectUri, $issueType, $issueTypeId);
7173
$this->assertEquals(json_decode($responseBody, true)['Response']['ProjectIssueStatusList'], $result);
7274
}
7375
}
Original file line numberDiff line numberDiff line change
@@ -1,79 +1,79 @@
11
{
2-
"Response": {
3-
"RequestId": "dc827006-32db-a74f-eeae-13bec31c8b92",
4-
"ProjectIssueStatusList": [
2+
"Response" : {
3+
"ProjectIssueStatusList" : [
54
{
6-
"IssueType": "REQUIREMENT",
7-
"IssueStatusId": 4,
8-
"IsDefault": true,
9-
"CreatedAt": 1597283400000,
10-
"UpdatedAt": 1597283400000,
11-
"Sort": 0,
12-
"IssueStatus": {
13-
"Id": 4,
14-
"Index": 3,
15-
"Name": "未开始",
16-
"Type": "TODO",
17-
"Description": "",
18-
"IsSystem": true,
19-
"CreatedAt": 1597283396000,
20-
"UpdatedAt": 1597283396000
21-
}
5+
"CreatedAt" : 1634639726000,
6+
"IsDefault" : true,
7+
"IssueStatus" : {
8+
"CreatedAt" : 1572178128000,
9+
"Description" : "",
10+
"Id" : 1227034,
11+
"Index" : 3,
12+
"IsSystem" : true,
13+
"Name" : "未开始",
14+
"Type" : "TODO",
15+
"UpdatedAt" : 1572178128000
16+
},
17+
"IssueStatusId" : 1227034,
18+
"IssueType" : "REQUIREMENT",
19+
"Sort" : 0,
20+
"UpdatedAt" : 1634639726000
2221
},
2322
{
24-
"IssueType": "REQUIREMENT",
25-
"IssueStatusId": 9,
26-
"IsDefault": false,
27-
"CreatedAt": 1597283400000,
28-
"UpdatedAt": 1597283400000,
29-
"Sort": 0,
30-
"IssueStatus": {
31-
"Id": 9,
32-
"Index": 8,
33-
"Name": "开发中",
34-
"Type": "PROCESSING",
35-
"Description": "",
36-
"IsSystem": true,
37-
"CreatedAt": 1597283396000,
38-
"UpdatedAt": 1597283396000
39-
}
23+
"CreatedAt" : 1634639726000,
24+
"IsDefault" : false,
25+
"IssueStatus" : {
26+
"CreatedAt" : 1572178128000,
27+
"Description" : "",
28+
"Id" : 1227037,
29+
"Index" : 4,
30+
"IsSystem" : true,
31+
"Name" : "处理中",
32+
"Type" : "PROCESSING",
33+
"UpdatedAt" : 1572178128000
34+
},
35+
"IssueStatusId" : 1227037,
36+
"IssueType" : "REQUIREMENT",
37+
"Sort" : 0,
38+
"UpdatedAt" : 1634639726000
4039
},
4140
{
42-
"IssueType": "REQUIREMENT",
43-
"IssueStatusId": 10,
44-
"IsDefault": false,
45-
"CreatedAt": 1597283400000,
46-
"UpdatedAt": 1597283400000,
47-
"Sort": 0,
48-
"IssueStatus": {
49-
"Id": 10,
50-
"Index": 9,
51-
"Name": "测试中",
52-
"Type": "PROCESSING",
53-
"Description": "",
54-
"IsSystem": true,
55-
"CreatedAt": 1597283396000,
56-
"UpdatedAt": 1597283396000
57-
}
41+
"CreatedAt" : 1634639726000,
42+
"IsDefault" : false,
43+
"IssueStatus" : {
44+
"CreatedAt" : 1572178128000,
45+
"Description" : "",
46+
"Id" : 1227040,
47+
"Index" : 5,
48+
"IsSystem" : true,
49+
"Name" : "待验证",
50+
"Type" : "PROCESSING",
51+
"UpdatedAt" : 1572178128000
52+
},
53+
"IssueStatusId" : 1227040,
54+
"IssueType" : "REQUIREMENT",
55+
"Sort" : 0,
56+
"UpdatedAt" : 1634639726000
5857
},
5958
{
60-
"IssueType": "REQUIREMENT",
61-
"IssueStatusId": 13,
62-
"IsDefault": false,
63-
"CreatedAt": 1597283400000,
64-
"UpdatedAt": 1597283400000,
65-
"Sort": 0,
66-
"IssueStatus": {
67-
"Id": 13,
68-
"Index": 12,
69-
"Name": "已完成",
70-
"Type": "COMPLETED",
71-
"Description": "",
72-
"IsSystem": true,
73-
"CreatedAt": 1597283396000,
74-
"UpdatedAt": 1597283396000
75-
}
59+
"CreatedAt" : 1634639726000,
60+
"IsDefault" : false,
61+
"IssueStatus" : {
62+
"CreatedAt" : 1572178128000,
63+
"Description" : "",
64+
"Id" : 1227058,
65+
"Index" : 11,
66+
"IsSystem" : true,
67+
"Name" : "已完成",
68+
"Type" : "COMPLETED",
69+
"UpdatedAt" : 1572178128000
70+
},
71+
"IssueStatusId" : 1227058,
72+
"IssueType" : "REQUIREMENT",
73+
"Sort" : 0,
74+
"UpdatedAt" : 1634639726000
7675
}
77-
]
76+
],
77+
"RequestId" : "3a8bb049-e28f-01c9-9990-0f17b92952c4"
7878
}
7979
}

tests/data/coding/scrum-issue-5.csv

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
ID,事项类型,标题,描述,状态,创建时间,创建人,更新时间,所属迭代,故事点,处理人,缺陷类型,优先级,截止日期,模块,标签,关注人,开始日期
2-
5,用户故事,用户可通过手机号注册账户,,开发中,2021-10-19 11:26:37,sinkcup,2021-10-19 11:26:37,第 1 次迭代,2,sinkcup,,中,2021-10-21,,,,
1+
ID,事项类型,标题,描述,状态,创建时间,创建人,更新时间,所属迭代,故事点,处理人,缺陷类型,优先级,截止日期,模块,标签,关注人,开始日期
2+
5,用户故事,用户可通过手机号注册账户,,处理中,2021-10-19 11:26:37,sinkcup,2021-10-19 11:26:37,第 1 次迭代,2,sinkcup,,中,2021-10-21,,,,
+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
ID,ParentCode,事项类型,标题,描述,状态,创建时间,创建人,更新时间,所属迭代,故事点,处理人,缺陷类型,优先级,截止日期,模块,标签,关注人,开始日期
22
7,5,子工作项,完成通过手机号注册用户的接口,,已完成,2021-10-19 11:26:38,sinkcup,2021-10-19 11:26:38,,,,,中,,,,,
33
6,5,子工作项,完成手机号注册的短信验证码发送接口,,已完成,2021-10-19 11:26:38,sinkcup,2021-10-19 11:26:38,,,,,低,,,,,
4-
5,,用户故事,用户可通过手机号注册账户,,开发中,2021-10-19 11:26:37,sinkcup,2021-10-19 11:26:37,,2,sinkcup,,,2021-10-21,,,,
4+
5,,用户故事,用户可通过手机号注册账户,,处理中,2021-10-19 11:26:37,sinkcup,2021-10-19 11:26:37,,2,sinkcup,,,2021-10-21,,,,

tests/data/coding/scrum-issues.csv

+32-32
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
1-
ID,ParentCode,事项类型,标题,描述,状态,创建时间,创建人,更新时间,所属迭代,故事点,处理人,缺陷类型,优先级,截止日期,模块,标签,关注人,开始日期
2-
23,,缺陷,商品详情页中商品价格字体应当显示为红色并且加粗,"步骤:
3-
4-
测试环境中,打开商品列表页;
5-
点击任意商品进详情页。
6-
测试结果:商品的价格字体显示为正常大小,颜色为黑色。
7-
预期结果:商品价格字体为红色加粗。",待处理,2021-10-19 11:26:39,sinkcup,2021-10-19 11:26:39,,,,,中,,,,,
8-
22,,缺陷,登录页输入正确的用户名和密码后提示“用户不存在”,"步骤:
9-
测试环境中,输入URL https://mywebsite.com/login 进入登录页;
10-
输入用户名 Admin 和密码 mypassword;
11-
点击“登录”按钮。
12-
测试结果:页面提示“用户不存在”。
13-
预期结果:提示“登录成功”并且页面自动跳转到首页。",处理中,2021-10-19 11:26:39,sinkcup,2021-10-19 11:26:39,,,sinkcup,,中,,,,,
14-
21,,任务,编制新功能的帮助文档并发布,,未开始,2021-10-19 11:26:39,sinkcup,2021-10-19 11:26:39,,,,,中,,,,,
15-
20,,任务,编写脚本将 Excel 中的线下订单转换为商城后台订单,,未开始,2021-10-19 11:26:39,sinkcup,2021-10-19 11:26:39,,,,,中,,,,,
16-
19,,任务,注册腾讯云账户,搭建测试环境和生产环境服务器,,处理中,2021-10-19 11:26:39,sinkcup,2021-10-19 11:26:39,第 1 次迭代,3,sinkcup,,中,2021-10-21,,,,
17-
18,,用户故事,用户可对未支付的订单执行取消订单操作,,未开始,2021-10-19 11:26:39,sinkcup,2021-10-19 11:26:39,,,,,中,,,,,
18-
17,,用户故事,管理员可在商城后台对订单执行发货操作,,未开始,2021-10-19 11:26:39,sinkcup,2021-10-19 11:26:39,,3,,,中,,,,,
19-
16,,用户故事,用户可在手机端搜索并查看指定的订单详情,,未开始,2021-10-19 11:26:39,sinkcup,2021-10-19 11:26:39,,1,,,中,,,,,
20-
15,,用户故事,通过访问邀请链接可注册成为商城用户,,未开始,2021-10-19 11:26:39,sinkcup,2021-10-19 11:26:39,,,,,中,,,,,
21-
14,,用户故事,管理员可取消未发货且状态异常的订单,,未开始,2021-10-19 11:26:38,sinkcup,2021-10-19 11:26:38,第 2 次迭代,3,,,中,,,,,
22-
13,,用户故事,用户可在“个人信息”中编辑个人基本信息,包括修改密码,,未开始,2021-10-19 11:26:38,sinkcup,2021-10-19 11:26:38,第 2 次迭代,2,sinkcup,,中,,,,,
23-
12,,用户故事,管理员可在商城后台搜索订单,,未开始,2021-10-19 11:26:38,sinkcup,2021-10-19 11:26:38,第 1 次迭代,2,,,中,,,,,
24-
11,,用户故事,管理员可在商城后台手工为用户下单,,未开始,2021-10-19 11:26:38,sinkcup,2021-10-19 11:26:38,第 1 次迭代,5,,,中,2021-10-26,,,,
25-
10,,用户故事,用户可在个人中心的“个人信息”中查看个人信息,,已完成,2021-10-19 11:26:38,sinkcup,2021-10-19 11:26:38,第 1 次迭代,1,,,中,,,,,
26-
9,,用户故事,用户可通过短信验证码登录商城,,开发中,2021-10-19 11:26:38,sinkcup,2021-10-19 11:26:38,第 1 次迭代,,,,中,,,,,
27-
8,5,子工作项,完成用户注册页面控件并集成后端接口,,处理中,2021-10-19 11:26:38,sinkcup,2021-10-19 11:26:38,第 1 次迭代,,,,中,2021-10-21,,,,
28-
7,5,子工作项,完成通过手机号注册用户的接口,,已完成,2021-10-19 11:26:38,sinkcup,2021-10-19 11:26:38,第 1 次迭代,,,,中,,,,,
29-
6,5,子工作项,完成手机号注册的短信验证码发送接口,,已完成,2021-10-19 11:26:38,sinkcup,2021-10-19 11:26:38,第 1 次迭代,,,,中,,,,,
30-
5,,用户故事,用户可通过手机号注册账户,,开发中,2021-10-19 11:26:37,sinkcup,2021-10-19 11:26:37,第 1 次迭代,2,sinkcup,,中,2021-10-21,,,,
31-
2,,史诗,订单管理,订单管理将实现用户的订单列表查询、订单详情、订单改价、订单地址修改、申请售后、订单取消等功能,未开始,2021-10-19 11:26:37,sinkcup,2021-10-19 11:26:37,,,,,中,,,,,2021-10-19
32-
1,,史诗,用户管理,用户管理将实现用户的注册、邀请、用户查询、个人信息管理、删除用户、注销账户等功能。,未开始,2021-10-19 11:26:37,sinkcup,2021-10-19 11:26:37,,,,,中,,,,,2021-10-19
1+
ID,ParentCode,事项类型,标题,描述,状态,创建时间,创建人,更新时间,所属迭代,故事点,处理人,缺陷类型,优先级,截止日期,模块,标签,关注人,开始日期
2+
23,,缺陷,商品详情页中商品价格字体应当显示为红色并且加粗,"步骤:
3+
4+
测试环境中,打开商品列表页;
5+
点击任意商品进详情页。
6+
测试结果:商品的价格字体显示为正常大小,颜色为黑色。
7+
预期结果:商品价格字体为红色加粗。",待处理,2021-10-19 11:26:39,sinkcup,2021-10-19 11:26:39,,,,,中,,,,,
8+
22,,缺陷,登录页输入正确的用户名和密码后提示“用户不存在”,"步骤:
9+
测试环境中,输入URL https://mywebsite.com/login 进入登录页;
10+
输入用户名 Admin 和密码 mypassword;
11+
点击“登录”按钮。
12+
测试结果:页面提示“用户不存在”。
13+
预期结果:提示“登录成功”并且页面自动跳转到首页。",处理中,2021-10-19 11:26:39,sinkcup,2021-10-19 11:26:39,,,sinkcup,,中,,,,,
14+
21,,任务,编制新功能的帮助文档并发布,,未开始,2021-10-19 11:26:39,sinkcup,2021-10-19 11:26:39,,,,,中,,,,,
15+
20,,任务,编写脚本将 Excel 中的线下订单转换为商城后台订单,,未开始,2021-10-19 11:26:39,sinkcup,2021-10-19 11:26:39,第 2 次迭代,5,,,中,,,,,
16+
19,,任务,注册腾讯云账户,搭建测试环境和生产环境服务器,,处理中,2021-10-19 11:26:39,sinkcup,2021-10-19 11:26:39,第 1 次迭代,5,sinkcup,,中,,,,,
17+
18,,用户故事,用户可对未支付的订单执行取消订单操作,,未开始,2021-10-19 11:26:39,sinkcup,2021-10-19 11:26:39,,,,,中,,,,,
18+
17,,用户故事,管理员可在商城后台对订单执行发货操作,,未开始,2021-10-19 11:26:39,sinkcup,2021-10-19 11:26:39,第 2 次迭代,3,,,中,,,,,
19+
16,,用户故事,用户可在手机端搜索并查看指定的订单详情,,未开始,2021-10-19 11:26:39,sinkcup,2021-10-19 11:26:39,第 2 次迭代,1,,,中,,,,,
20+
15,,用户故事,通过访问邀请链接可注册成为商城用户,,未开始,2021-10-19 11:26:39,sinkcup,2021-10-19 11:26:39,第 2 次迭代,2,,,中,,,,,
21+
14,,用户故事,管理员可取消未发货且状态异常的订单,,未开始,2021-10-19 11:26:38,sinkcup,2021-10-19 11:26:38,第 2 次迭代,3,,,中,,,,,
22+
13,,用户故事,用户可在“个人信息”中编辑个人基本信息,包括修改密码,,未开始,2021-10-19 11:26:38,sinkcup,2021-10-19 11:26:38,第 2 次迭代,2,sinkcup,,中,,,,,
23+
12,,用户故事,管理员可在商城后台搜索订单,,未开始,2021-10-19 11:26:38,sinkcup,2021-10-19 11:26:38,第 1 次迭代,2,,,中,,,,,
24+
11,,用户故事,管理员可在商城后台手工为用户下单,,未开始,2021-10-19 11:26:38,sinkcup,2021-10-19 11:26:38,第 1 次迭代,5,,,中,,,,,
25+
10,,用户故事,用户可在个人中心的“个人信息”中查看个人信息,,已完成,2021-10-19 11:26:38,sinkcup,2021-10-19 11:26:38,第 1 次迭代,1,,,中,,,,,
26+
9,,用户故事,用户可通过短信验证码登录商城,,处理中,2021-10-19 11:26:38,sinkcup,2021-10-19 11:26:38,第 1 次迭代,1,,,中,,,,,
27+
8,5,子工作项,完成用户注册页面控件并集成后端接口,,处理中,2021-10-19 11:26:38,sinkcup,2021-10-19 11:26:38,第 1 次迭代,,,,中,,,,,
28+
7,5,子工作项,完成通过手机号注册用户的接口,,已完成,2021-10-19 11:26:38,sinkcup,2021-10-19 11:26:38,第 1 次迭代,,,,中,,,,,
29+
6,5,子工作项,完成手机号注册的短信验证码发送接口,,已完成,2021-10-19 11:26:38,sinkcup,2021-10-19 11:26:38,第 1 次迭代,,,,中,,,,,
30+
5,,用户故事,用户可通过手机号注册账户,,处理中,2021-10-19 11:26:37,sinkcup,2021-10-19 11:26:37,第 1 次迭代,2,sinkcup,,中,,,,,
31+
2,,史诗,订单管理,订单管理将实现用户的订单列表查询、订单详情、订单改价、订单地址修改、申请售后、订单取消等功能,未开始,2021-10-19 11:26:37,sinkcup,2021-10-19 11:26:37,,,,,中,,,,,
32+
1,,史诗,用户管理,用户管理将实现用户的注册、邀请、用户查询、个人信息管理、删除用户、注销账户等功能。,未开始,2021-10-19 11:26:37,sinkcup,2021-10-19 11:26:37,,,,,中,,,,,

0 commit comments

Comments
 (0)