From 883215056253417a09eee93a05ba7ab2f4f6b312 Mon Sep 17 00:00:00 2001 From: sexygoat <1538832180@qq.com> Date: Wed, 6 May 2026 10:54:43 +0800 Subject: [PATCH] feat: sn --- .../proposal.md | 24 ++++++++++++++++++ .../specs/device-batch-import/spec.md | 21 +++++++++++++++ .../tasks.md | 5 ++++ src/template/设备导入模板.xlsx | Bin 8950 -> 9018 bytes .../components/OperationLogsCard.vue | 2 +- .../task-management/device-task/index.vue | 10 ++++---- 6 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 openspec/changes/update-device-batch-import-contract/proposal.md create mode 100644 openspec/changes/update-device-batch-import-contract/specs/device-batch-import/spec.md create mode 100644 openspec/changes/update-device-batch-import-contract/tasks.md diff --git a/openspec/changes/update-device-batch-import-contract/proposal.md b/openspec/changes/update-device-batch-import-contract/proposal.md new file mode 100644 index 0000000..a6cc64f --- /dev/null +++ b/openspec/changes/update-device-batch-import-contract/proposal.md @@ -0,0 +1,24 @@ +# Change: 更新设备导入模板新增 SN 列 + +## Why + +设备批量导入模板有一处明确变更:在必填 `virtual_no` 后新增一个非必填 `sn` 列。 + +如果后台继续分发旧模板,运营按旧列顺序填表时会与最新模板不一致,影响设备导入使用。 + +本提案只覆盖这一个变化,不引入其他接口、流程、默认值或交互行为调整。 + +## What Changes + +- 更新设备任务页使用的 `设备导入模板.xlsx`,在 `virtual_no` 后新增可选 `sn` 列 +- 更新设备任务页“批量导入设备”弹窗说明文案,明确 `sn` 为新增的可选列 + +## Impact + +- Affected specs: + - `device-batch-import` +- Affected code: + - `src/template/设备导入模板.xlsx` + - `src/views/asset-management/task-management/device-task/index.vue` +- Breaking changes: + - 无接口层 breaking change diff --git a/openspec/changes/update-device-batch-import-contract/specs/device-batch-import/spec.md b/openspec/changes/update-device-batch-import-contract/specs/device-batch-import/spec.md new file mode 100644 index 0000000..6987d4c --- /dev/null +++ b/openspec/changes/update-device-batch-import-contract/specs/device-batch-import/spec.md @@ -0,0 +1,21 @@ +# Device Batch Import Specification + +## ADDED Requirements + +### Requirement: Admin device import template includes optional sn after virtual_no + +The admin device import template SHALL insert an optional `sn` column immediately after required `virtual_no`. + +#### Scenario: Download the latest device import template + +- **GIVEN** a platform user opens the "批量导入设备" dialog +- **WHEN** the user clicks "下载导入模板" +- **THEN** the downloaded template MUST include `virtual_no` as the first column +- **AND** the downloaded template MUST include `sn` as the second column +- **AND** `sn` MUST be optional + +#### Scenario: Import dialog documents the new sn column + +- **GIVEN** a platform user opens the "批量导入设备" dialog +- **WHEN** the import instructions are displayed +- **THEN** the page MUST indicate that `sn` is an optional column in the device import template diff --git a/openspec/changes/update-device-batch-import-contract/tasks.md b/openspec/changes/update-device-batch-import-contract/tasks.md new file mode 100644 index 0000000..7313cfa --- /dev/null +++ b/openspec/changes/update-device-batch-import-contract/tasks.md @@ -0,0 +1,5 @@ +## 1. Implementation + +- [x] 1.1 更新 `src/template/设备导入模板.xlsx`,在 `virtual_no` 后新增 `sn` 列 +- [x] 1.2 更新设备任务页导入弹窗文案,明确 `sn` 是新增的非必填列 +- [x] 1.3 验证模板首行列顺序包含新增 `sn` 列 diff --git a/src/template/设备导入模板.xlsx b/src/template/设备导入模板.xlsx index 48b209eba83a22c58ca7faf62d6920cd44577096..296624ad8fba264a6b72f7dba3023e5fc4dba3f7 100644 GIT binary patch delta 2487 zcmY+GX*d*$7shAoyTQ=d${2eH*_kLzLb6YmEXf*%Y=s&#Ci^~?EJJ0Nim{CBW2a=D zY@u+;MI*9i`QO`@fA>7k`E=fI@B4e+vuDtRs2*fs&LYFqhiCu*IDVV~iWXh)h^tkt z8y%}yPkBb?iLIHl%5~`Ttr8EZCe%~vjJqxUF?8I>EgGf*cb*h-z*xw7*yV=u`oITO z!wVX#S{^8LfyYOB%UokFSj!SDhFOM3zEm*`tsP|FKN=m2yJt}ik$Z;tMOYo)bGIO* zlxT+nbiYALdckR{Ub#ec{x@M;1z2oWknflkKs$pUXy}H7;228X``;nwc_(w zs3ec6t<#v2N9Tk{yjwTmF=6}K+mQ!HpvL_29io552i8c)PGX(`eSCgCBE}NR%kKf& z6H+6*!#XjcH@dj1{AeaWS!&q1m07gLLx@F}@T@#0NyqXv(b1)Up<;%dVCL1@( zs_<8$Z-kj!fY~-%%hhJ#y0l5#_lJfW&!5=13YR$)$_M*#VkDY!T#P_nVHS|oFG|H_ zgReWkmvDD)wz#1$7`=h~1RJt;;xb2K6L+~3D=aHz5htD#wYj_r=Tn7)@%ahnX;;;5 z-m%~xsq!PUuKfK}RrZ3H!S(7c{w_plv2nw%Wu0#0@|y{ak1F0xQuhPtpyi(8Bd{W& zhdLYWSkYG4IWr{?g1GTbubg=v&SPb8u%YDRA{5m8LQ5Mx<=dPzx7XoY->es^u%*}w zZ=d#TX~a5PLCkL$;pHjLFI*=g$58Ja@rQ#^C*{ina!JPM!^V(yQdI;})mdxbR6TFa ze(v^oPT_;Je%nL`A4=PlvPb4lhNJ}jR~37pP(^#|y@*^I*Uvsj4aQc^IX#|H=I!pv zxW4-L46v(IjuP)qntJb0eF`rcecX0>w05-mc0FamuMPd~@R+f;iO_A`nN}nkUZ`o} zZ#}|GC(d6l49tUnLw=+zQ;%u!X|&+l3g*i+9BQP~H!8FMz#J0*00H0=paST88(-9n z0_gOL*BNSjyFezT*IL9}r+Ml(jQx5ha_ zW?JU29O)b2TjiLO^^*QwjGWu*NQqVJn{8H!aUrP{Q7(66>fH( z&z^n(@MJS8Z}Bj$%t}GLKJg~&v(^X0WncGO+pgR81PPqkDld;&M#!OkfGJkwz6O0w zUZlU+eROJ-ecE(T1=&a+db&i_Ip;6Aw|L@Xm2gE_Qk36wJMMY?0&^LBn= zAr=+no5)7c*}+}zA~TZv&kw)LcpLH+uDy*hKgTKyb3;@e;v{dxN`fj*?;J!z)wg6g zcYly)tJFsp!0``Fkm$HWd9_dn*(`?7AtEN>rVOKggDO$9EXnp)`-n<80D1>=8J{vT zuxJ((HGt4}=U?nV?ap8pB&yHXWU4BiSc~36IoXBmXCX7i*9acWuN@9>ztBe;RJpHD zsy8MgylZRWG>WaYD4H>gM# zK4mXSp^O8fjILaaOcMJbRBc{+iDSxelt8O06NVN5d4Z|q8kE(^4>)MKIxD`&%{Jen zXYkEH_SSb*EXKP>>9P%{uS=+gvaf`s((DM0xV)gFzyGIr%q#ZcZkhlnD+J3`>sd^is5 zr3CET!WD1AF-w6RF2u0MFLd~9|Cowd9iHa7@4{cT_>4Y7T>)OI8+il6M@!u3czU>& z!3KK_DokRJdcAwS)YBn( zCbn7ih+C_JlF&HC$5>BV8S4M#1?PW-Y_B?UL6K5kI^OJPInKxyNgy=uCj|ze8#6oV zOjWxL0zbYd@!j9Zo+{?>qjtclI8E@nt%j6emlq;_a8Xa07l1rh_msOJmRE zbkji>lGA+No<(WNS)yX(!2ZOU)CS5)r%o_DO8vu7g!blf>Cuu`DCqJ~Kg8W;xV%y# z^rw!bm=4oE&%XxJKRS%Hl&V!1lmMcKOuH07II3Zb-g5X|$rrrDbgP$ji@Lx#5s=#Z z`3Alk*Xd|wR7zf!*^}f?AD(Dw$-8S&^e;FQe1hY~aL<{PQBNoGxZ#xd2iyi9FU#E? z_m(o}#u&XAv z*RX#{OqI6zlH*+P6|SHP;}TB8rWo${dW4WX_m=*Yy*ye)r@j1$ z?sw$z!bsXbzM~xxQ(y!B8dOg3zr_OhW7hETPy?V9egvuue1PW?6%qPBG5`Sh4Htm^goWUk?;Tj delta 2435 zcmY+Gc{CJ`7RSdh*0B#^EX^2WHrrAa)lw)0qJSIv+C=GdK8=8?~iV-fHz43EU#^dY}q z3{xt3vIO=+nL$+{KY{zg{Os*ITxh82rwfj@{lqC?U<0zXxF}W)7Od!uTOllXo2fd{ zBJshEKBdW~wcL)*ovLEr3e!wFTpv22%|6HuO)KN|zkaoh?XkYT26u&o2H}+-dXups zyTW*9p~X`*F0|EGhG0=8Hmg`8+MANu1Cv@ayl!j%Oy$*4SX8CK!Cgj$ByVn^ zxJ%mC^I7=mlS>!OeV>nmn$DIU9<@bzmA&eTxnly0mErR+{5n4pSk$NgwUf>dJo2lV2~=a<1nR^VT}mkSV(rCMuxm*)$j4rwhme(xbQhgMn>K<( z<~Uo6?;+7GHOp^Q(=nk3=Wn!WpP?x$Ptxmz2UZTp`EC$JsaFvZ(%yHRg*_`#OovUf zJQ8%NUQZua(cbFwCk5y`jQ?Z&XJ5lxcuP;9jh1fGYg(6t>>gj~vv6Sjb(1HWKjvlH ztJ@Qsj}O)kmm2amke+z`lbiSuDDGicntkA)T~~@dDCD#cg)zRWK9%kvf|H2flL3%2 zSs|og7+>8mmmHAm&Z1a`JSzb3Gz$zP1cy$mLyq)=PCB>tvN+zOjmj0s*$$+#`Wb!b zYnJEc`BN*UK_>|lTwLL~O0H~iQuC1s83|X!=Dv=wg*>vq>Id7^RWng}3ja8z)P2cg z#fdeIjC3&)%A^U%I7K`@132?}N!7C|-6{^%@!VDv_-ba5bRajmP`tyHnF$lpTeA)4qMlQgBs{L|z3 zy|`}5xFvJP(`ac&@(q1fWr0BKJDDW6B)=KiEpirlg zYM6S&Si*LDr&>9f)t>JbM#XN?w4_CTFy*i5jWwE3REk_)l?OcN>gvS}mI_n{EC8jO zI?DfIxt(eAt^wDVh3MwDsW^0BPQsWijEYkx9O!Yh;&yWgEf*(rL~vi17WaH{w&aV! zqktl|A@3eYDla!tFLA!cHWL7n#P(THJK1G_2pIO>H;tF_ng0TAZkyThy6^;AYJB+I zsKxhBajrnYICsh*R0iV!sYXy_a@3xhdD-MZAPHm($YE?>U3Xc-_U>^KArDg$TGNI+hBUgvLB;O zsOjS)G}k>I!{p>dW4LlG&r4NJ<2l!olv>Zz+jFNP(3IA_2&R4P#3|k z$j#SI50A@W0RXVS9D@8}a8W`U>77N_Wk~8?@`n0bi&MI!mt{mmI98-qfm5lh_%1@htu-MU@aGwMo({i3Vv$=P(+jCv1e`H*&6CdwjC&qP@ zv(}q~S&ID~xmGExIXNrxmYj{7L5yk*3&}>~^ZDVXrnmu+O)FWiMu}i_CS3sKWWKs> zE-Ltp>>zrl&1OE9_nQJTG1ZAn(3|(O7*ydqE4RU;v5K(ARfaay&iDcd2MFw*$5Ev^ zd;BJ7xbcB$hVNE_(+zx22;wUA=q~HRu9e4^{-u>`4cfcW9|n4+(`BA}PcrB3;j}f? ztIsg~d$$%AgMZl4cQpyQ%Q!cW=u@q>!wFWd7a#aftOs@|i?&X|$j2z9J(SX=d`;fD zUYEus9-Vi!mEQxhNX+Ab;NibFVybA_j!qWB{}Kvwv~$(st^C~dlZ;hY-LdGejobhB zJ-=$j4)mQFZ@HFHArYu2BK?V3. 列格式请设置为文本格式,避免长数字被转为科学计数法

4. 重要:列顺序固定,不可调整。系统按位置读取,不识别列名

5. 必填列:虚拟号(第1列)

-

6. - 可选列:设备名称、设备型号、设备类型、IMEI、制造商、最大SIM槽数(默认4,有效范围1-4)、卡1~卡4 - ICCID

+

+ 6. + 可选列:SN、设备名称、设备型号、设备类型、IMEI、制造商、最大SIM槽数(默认4,有效范围1-4)、卡1~卡4 + ICCID +