data.config.ts 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829
  1. import { BasicColumn, FormSchema } from '/@/components/Table';
  2. import { requestMagicApi } from '/@/api/magicApi';
  3. import { getDataOption } from '/@/api/system/dic';
  4. import { getSubjectGroupInfo } from '/@/services/apis/SubjectGroupController';
  5. import { getTextbookInfoByissn } from '/@/services/apis/TextbookController';
  6. import { getMajorSetOption } from '/@/api/userMagic';
  7. export const type = {
  8. 0: '菜单',
  9. 1: '目录',
  10. };
  11. export const TableColumns: BasicColumn[] = [
  12. {
  13. title: '书号(ISSN)',
  14. dataIndex: 'issn',
  15. customRender: ({ text }) => {
  16. return text ? text : '/';
  17. },
  18. },
  19. {
  20. title: '书名',
  21. dataIndex: 'bookName',
  22. customRender: ({ text }) => {
  23. return text ? text : '/';
  24. },
  25. },
  26. {
  27. title: '出版社',
  28. dataIndex: 'publishingHouse',
  29. customRender: ({ text }) => {
  30. return text ? text : '/';
  31. },
  32. },
  33. {
  34. title: '作者(主编)',
  35. dataIndex: 'editorInChief',
  36. customRender: ({ text }) => {
  37. return text ? text : '/';
  38. },
  39. },
  40. {
  41. title: '学科组',
  42. dataIndex: 'groupName',
  43. customRender: ({ text }) => {
  44. return text ? text : '/';
  45. },
  46. },
  47. // {
  48. // title: '使用学期',
  49. // dataIndex: 'semesterName',
  50. // customRender: ({ text }) => {
  51. // return text ? text : '/';
  52. // },
  53. // },
  54. // {
  55. // title: '使用班级',
  56. // dataIndex: 'useClass',
  57. // customRender: ({ text }) => {
  58. // return text ? text : '/';
  59. // },
  60. // },
  61. {
  62. title: '对应课程',
  63. dataIndex: 'courseName',
  64. customRender: ({ text }) => {
  65. return text ? text : '/';
  66. },
  67. },
  68. {
  69. title: '规划教材',
  70. dataIndex: 'isTextbookPlanCn',
  71. customRender: ({ text }) => {
  72. return text ? text : '/';
  73. },
  74. },
  75. {
  76. title: '类型',
  77. dataIndex: 'textbookTypeCn',
  78. customRender: ({ text }) => {
  79. return text ? text : '/';
  80. },
  81. },
  82. {
  83. title: '规格型号',
  84. dataIndex: 'specificationsModels',
  85. customRender: ({ text }) => {
  86. return text ? text : '/';
  87. },
  88. },
  89. {
  90. title: '估价(元)',
  91. dataIndex: 'appraisalPrice',
  92. customRender: ({ text }) => {
  93. return text ? text : '/';
  94. },
  95. },
  96. {
  97. title: '定价(元)',
  98. dataIndex: 'price',
  99. customRender: ({ text }) => {
  100. return text ? text : '/';
  101. },
  102. },
  103. {
  104. title: '折扣(折)',
  105. dataIndex: 'discount',
  106. customRender: ({ text }) => {
  107. return text ? text : '/';
  108. },
  109. },
  110. {
  111. title: '小计(元)',
  112. dataIndex: 'subtotal',
  113. customRender: ({ text }) => {
  114. return text ? text : '/';
  115. },
  116. },
  117. {
  118. title: '库存(本、册)',
  119. dataIndex: 'stock',
  120. customRender: ({ text }) => {
  121. return text ? text : '/';
  122. },
  123. },
  124. {
  125. title: '操作',
  126. dataIndex: 'action',
  127. width: 220,
  128. fixed: 'right',
  129. slots: { customRender: 'action' },
  130. },
  131. ];
  132. export const formSchema: FormSchema[] = [
  133. {
  134. field: 'id',
  135. component: 'Input',
  136. label: 'id',
  137. show: false,
  138. },
  139. {
  140. label: '书号',
  141. field: 'issn',
  142. component: 'Input',
  143. componentProps: ({ formModel, formActionType }) => {
  144. return {
  145. onBlur: async (_) => {
  146. if (!formModel.issn) {
  147. return false;
  148. }
  149. const data = await getTextbookInfoByissn({ issn: formModel.issn });
  150. data && formActionType.setFieldsValue(Object.keys(data).length ? data : {});
  151. await formActionType.setFieldsValue({
  152. classId: data.textbookClassRelationList.map((item) => item.classId),
  153. });
  154. },
  155. };
  156. },
  157. required: true,
  158. colProps: { span: 12 },
  159. },
  160. {
  161. label: '书名',
  162. field: 'bookName',
  163. component: 'Input',
  164. required: true,
  165. colProps: { span: 12 },
  166. },
  167. {
  168. label: '类型',
  169. field: 'textbookType',
  170. component: 'ApiSelect',
  171. componentProps: {
  172. api: getDataOption,
  173. params: { code: 'textbook_type' },
  174. },
  175. required: true,
  176. colProps: { span: 12 },
  177. },
  178. {
  179. label: '出版社名称',
  180. field: 'publishingHouse',
  181. component: 'Input',
  182. required: true,
  183. colProps: { span: 12 },
  184. },
  185. {
  186. label: '版次',
  187. field: 'version',
  188. component: 'Input',
  189. required: true,
  190. colProps: { span: 12 },
  191. },
  192. {
  193. label: '作者(主编)',
  194. field: 'editorInChief',
  195. component: 'Input',
  196. required: true,
  197. colProps: { span: 12 },
  198. },
  199. {
  200. label: '规划教材',
  201. field: 'isTextbookPlan',
  202. component: 'ApiSelect',
  203. componentProps: {
  204. api: getDataOption,
  205. params: { code: 'judgment_method_1' },
  206. },
  207. required: true,
  208. colProps: { span: 12 },
  209. },
  210. {
  211. label: '定价(元)',
  212. field: 'price',
  213. component: 'InputNumber',
  214. defaultValue: 0,
  215. required: true,
  216. componentProps: ({ formModel }) => {
  217. return {
  218. min: 0,
  219. onChange: (e) => {
  220. if (e !== 0) {
  221. formModel.discount = ((formModel.subtotal / e) * 10).toFixed(1);
  222. } else {
  223. formModel.discount = 0;
  224. }
  225. },
  226. };
  227. },
  228. colProps: { span: 12 },
  229. },
  230. {
  231. label: '估价(元)',
  232. field: 'appraisalPrice',
  233. component: 'InputNumber',
  234. componentProps: {
  235. min: 0,
  236. },
  237. colProps: { span: 12 },
  238. },
  239. {
  240. label: '使用类型',
  241. field: 'useType',
  242. component: 'Select',
  243. required: true,
  244. componentProps: {
  245. options: [
  246. { label: '一学期', value: 1 },
  247. { label: '二学期', value: 2 },
  248. { label: '三学期', value: 3 },
  249. { label: '四学期', value: 4 },
  250. { label: '五学期', value: 5 },
  251. { label: '六学期', value: 6 },
  252. ],
  253. },
  254. colProps: { span: 12 },
  255. },
  256. {
  257. field: 'subtotal',
  258. label: '小计(元)',
  259. component: 'InputNumber',
  260. defaultValue: 0,
  261. required: true,
  262. colProps: { span: 12 },
  263. dynamicDisabled: true,
  264. componentProps: ({ formModel }) => {
  265. return {
  266. min: 0,
  267. onChange: (e) => {
  268. if (!e) {
  269. return false;
  270. }
  271. if (formModel.price !== 0) {
  272. formModel.discount = ((e / formModel.price) * 10).toFixed(1);
  273. } else {
  274. formModel.discount = 0;
  275. }
  276. },
  277. };
  278. },
  279. },
  280. {
  281. label: '折扣(折)',
  282. field: 'discount',
  283. component: 'InputNumber',
  284. componentProps: ({ formModel }) => {
  285. return {
  286. onChange: (e) => {
  287. if (e < 1) {
  288. e = 1;
  289. }
  290. if (e > 10) {
  291. e = 10;
  292. }
  293. formModel.subtotal = (((formModel.price || 0) * e) / 10).toFixed(2);
  294. // if (formModel.price && formModel.subtotal) {
  295. // formModel.subtotal = (formModel.price * e).toFixed(2);
  296. // }
  297. },
  298. };
  299. },
  300. // dynamicDisabled: true,
  301. colProps: { span: 12 },
  302. },
  303. {
  304. label: '学科组',
  305. field: 'subjectGroupId',
  306. component: 'ApiSelect',
  307. required: true,
  308. ifShow: ({ values }) => {
  309. return values.textbookType == 't_textbook';
  310. },
  311. componentProps: {
  312. api: requestMagicApi,
  313. params: { url: '/educational/subjectGroup/list' },
  314. },
  315. colProps: { span: 12 },
  316. },
  317. {
  318. label: '对应课程',
  319. field: 'courseSubjectId',
  320. required: true,
  321. component: 'ApiSelect',
  322. ifShow: ({ values }) => {
  323. return values.textbookType == 't_textbook';
  324. },
  325. componentProps: ({ formModel }) => {
  326. return {
  327. api: async () => {
  328. if (!formModel.subjectGroupId) {
  329. return [];
  330. }
  331. const data = await getSubjectGroupInfo({ id: formModel.subjectGroupId });
  332. return data.subjectGroupCourseList.map((item) => {
  333. return {
  334. label: item.courseSubjectIdCN,
  335. value: item.courseSubjectId,
  336. };
  337. });
  338. },
  339. showSearch: true,
  340. // 搜索参考
  341. filterOption: (input, option) => {
  342. return (
  343. option?.label.toLowerCase().indexOf(input.toLowerCase()) >= 0 ||
  344. option?.value.toLowerCase().indexOf(input.toLowerCase()) >= 0
  345. );
  346. },
  347. };
  348. },
  349. colProps: { span: 12 },
  350. },
  351. // {
  352. // label: '使用年级',
  353. // field: 'gradeId',
  354. // component: 'ApiSelect',
  355. // componentProps: {
  356. // api: requestMagicApi,
  357. // params: { url: '/baseData/grade/option' },
  358. // },
  359. // colProps: { span: 12 },
  360. // },
  361. // {
  362. // label: '使用班级',
  363. // field: 'classId',
  364. // required: true,
  365. // component: 'ApiSelect',
  366. // componentProps: ({ formModel }) => {
  367. // return {
  368. // api: requestMagicApi,
  369. // params: {
  370. // url: `educational/class/gradeid?grade_id=${formModel.gradeId ? formModel.gradeId : ''}`,
  371. // },
  372. // showSearch: true,
  373. // mode: 'multiple',
  374. // // 搜索参考
  375. // filterOption: (input, option) => {
  376. // return (
  377. // option?.label.toLowerCase().indexOf(input.toLowerCase()) >= 0 ||
  378. // option?.value.toLowerCase().indexOf(input.toLowerCase()) >= 0
  379. // );
  380. // },
  381. // };
  382. // },
  383. // colProps: { span: 12 },
  384. // },
  385. // {
  386. // label: '使用学期',
  387. // field: 'baseSemesterId',
  388. // component: 'ApiSelect',
  389. // required: true,
  390. // componentProps: {
  391. // api: requestMagicApi,
  392. // params: { url: 'baseData/semester/option' },
  393. // },
  394. // colProps: { span: 12 },
  395. // },
  396. ];
  397. export const searchFormSchema: FormSchema[] = [
  398. {
  399. label: '教材类型',
  400. field: 'textbookType',
  401. component: 'ApiSelect',
  402. componentProps: {
  403. getPopupContainer: () => document.body,
  404. api: getDataOption,
  405. params: { code: 'textbook_type' },
  406. },
  407. colProps: { span: 6 },
  408. },
  409. {
  410. label: '学期',
  411. field: 'baseSemesterId',
  412. component: 'ApiSelect',
  413. componentProps: {
  414. getPopupContainer: () => document.body,
  415. api: requestMagicApi,
  416. params: { url: 'baseData/semester/option' },
  417. },
  418. colProps: { span: 6 },
  419. },
  420. {
  421. label: '学科组',
  422. field: 'subjectGroupId',
  423. component: 'ApiSelect',
  424. componentProps: {
  425. getPopupContainer: () => document.body,
  426. api: requestMagicApi,
  427. params: { url: '/educational/subjectGroup/list' },
  428. },
  429. colProps: { span: 6 },
  430. },
  431. {
  432. label: '书号',
  433. field: 'issn',
  434. component: 'Input',
  435. colProps: { span: 6 },
  436. },
  437. {
  438. label: '书名',
  439. field: 'bookName',
  440. component: 'Input',
  441. colProps: { span: 6 },
  442. },
  443. // {
  444. // label: '出版社名称',
  445. // field: 'publishingHouse',
  446. // component: 'Input',
  447. // colProps: { span: 6 },
  448. // },
  449. {
  450. field: 'majorSetId',
  451. label: '专业方向',
  452. component: 'ApiSelect',
  453. componentProps: ({}) => {
  454. return {
  455. getPopupContainer: () => document.body,
  456. api: getMajorSetOption,
  457. };
  458. },
  459. colProps: { span: 6 },
  460. },
  461. // {
  462. // label: '作者(主编)',
  463. // field: 'editorInChief',
  464. // component: 'Input',
  465. // colProps: { span: 6 },
  466. // },
  467. {
  468. label: '规划教材',
  469. field: 'isTextbookPlan',
  470. component: 'ApiSelect',
  471. componentProps: {
  472. getPopupContainer: () => document.body,
  473. api: getDataOption,
  474. params: { code: 'judgment_method_1' },
  475. },
  476. colProps: { span: 6 },
  477. },
  478. {
  479. label: '对应课程',
  480. field: 'courseSubjectId',
  481. component: 'ApiSelect',
  482. componentProps: ({ formModel }) => {
  483. return {
  484. getPopupContainer: () => document.body,
  485. api: async () => {
  486. if (!formModel.subjectGroupId) {
  487. return [];
  488. }
  489. const data = await getSubjectGroupInfo({ id: formModel.subjectGroupId });
  490. return data.subjectGroupCourseList.map((item) => {
  491. return {
  492. label: item.courseSubjectIdCN,
  493. value: item.courseSubjectId,
  494. };
  495. });
  496. },
  497. showSearch: true,
  498. // 搜索参考
  499. filterOption: (input, option) => {
  500. return (
  501. option?.label.toLowerCase().indexOf(input.toLowerCase()) >= 0 ||
  502. option?.value.toLowerCase().indexOf(input.toLowerCase()) >= 0
  503. );
  504. },
  505. };
  506. },
  507. colProps: { span: 6 },
  508. },
  509. // {
  510. // label: '使用年级',
  511. // field: 'gradeId',
  512. // component: 'ApiSelect',
  513. // componentProps: {
  514. // getPopupContainer: () => document.body,
  515. // api: requestMagicApi,
  516. // params: { url: '/baseData/grade/option' },
  517. // },
  518. // colProps: { span: 6 },
  519. // },
  520. // {
  521. // label: '使用班级',
  522. // field: 'classId',
  523. // component: 'ApiSelect',
  524. // componentProps: ({ formModel }) => {
  525. // return {
  526. // getPopupContainer: () => document.body,
  527. // api: requestMagicApi,
  528. // params: { url: `educational/class/gradeid?grade_id=${formModel.gradeId}` },
  529. // showSearch: true,
  530. // mode: 'multiple',
  531. // // 搜索参考
  532. // filterOption: (input, option) => {
  533. // return (
  534. // option?.label.toLowerCase().indexOf(input.toLowerCase()) >= 0 ||
  535. // option?.value.toLowerCase().indexOf(input.toLowerCase()) >= 0
  536. // );
  537. // },
  538. // };
  539. // },
  540. // colProps: { span: 6 },
  541. // },
  542. ];
  543. export const pushFormSchema: FormSchema[] = [
  544. {
  545. field: 'textbookId',
  546. component: 'Input',
  547. label: '教材管理编号',
  548. show: false,
  549. },
  550. {
  551. field: 'issn',
  552. label: '书号',
  553. component: 'Input',
  554. dynamicDisabled: true,
  555. colProps: { span: 24 },
  556. },
  557. {
  558. field: 'bookName',
  559. label: '书名',
  560. component: 'Input',
  561. required: true,
  562. dynamicDisabled: true,
  563. colProps: { span: 24 },
  564. },
  565. {
  566. field: 'stock',
  567. label: '库存',
  568. component: 'Input',
  569. defaultValue: 0,
  570. dynamicDisabled: true,
  571. colProps: { span: 24 },
  572. },
  573. {
  574. field: 'warehouseNumber',
  575. label: '入库数量',
  576. component: 'InputNumber',
  577. componentProps: ({ formModel }) => {
  578. return {
  579. min: 0,
  580. onChange: (e) => {
  581. if (!e || !formModel.price) {
  582. formModel.totalPrice = undefined;
  583. return false;
  584. }
  585. formModel.totalPrice = (
  586. e *
  587. formModel.price *
  588. (formModel.discount ? formModel.discount / 10 : 1)
  589. ).toFixed(2);
  590. },
  591. };
  592. },
  593. required: true,
  594. colProps: { span: 24 },
  595. },
  596. {
  597. field: 'source',
  598. label: '来源',
  599. component: 'Input',
  600. required: true,
  601. colProps: { span: 24 },
  602. },
  603. {
  604. field: 'price',
  605. label: '单价',
  606. component: 'InputNumber',
  607. required: true,
  608. componentProps: ({ formModel }) => {
  609. return {
  610. min: 0,
  611. onChange: (e) => {
  612. if (!e || !formModel.warehouseNumber) {
  613. formModel.totalPrice = undefined;
  614. return false;
  615. }
  616. formModel.totalPrice = (
  617. e *
  618. formModel.warehouseNumber *
  619. (formModel.discount ? formModel.discount / 10 : 1)
  620. ).toFixed(2);
  621. },
  622. };
  623. },
  624. colProps: { span: 24 },
  625. },
  626. {
  627. label: '折扣(折)',
  628. field: 'discount',
  629. component: 'InputNumber',
  630. colProps: { span: 24 },
  631. componentProps: ({ formModel }) => {
  632. return {
  633. onChange: (e) => {
  634. if (e < 1) {
  635. e = 1;
  636. }
  637. if (e > 10) {
  638. e = 10;
  639. }
  640. if (!e || !formModel.warehouseNumber || !formModel.price) {
  641. formModel.totalPrice = undefined;
  642. return false;
  643. }
  644. formModel.totalPrice = (
  645. formModel.price *
  646. formModel.warehouseNumber *
  647. (e ? e / 10 : 1)
  648. ).toFixed(2);
  649. },
  650. };
  651. },
  652. },
  653. {
  654. field: 'totalPrice',
  655. label: '总价(元)',
  656. component: 'InputNumber',
  657. componentProps: {
  658. min: 0,
  659. },
  660. required: true,
  661. colProps: { span: 24 },
  662. },
  663. ];
  664. export const infoEumns = {
  665. issn: '书号',
  666. bookName: '书名',
  667. textbookTypeCn: '类型',
  668. publishingHouse: '出版社',
  669. editorInChief: '作者(主编)',
  670. isTextbookPlanCn: '是否为规划教材',
  671. price: '定价(元)',
  672. appraisalPrice: '估价(元)',
  673. discount: '折扣(折)',
  674. stock: '库存',
  675. };
  676. export const textbookInfoEumns = {
  677. groupName: '对应学科组',
  678. courseName: '对应课程',
  679. useGrade: '使用年级',
  680. useClass: '使用班级',
  681. };
  682. export const SubscriptionsColumns: BasicColumn[] = [
  683. {
  684. title: '征订时间',
  685. dataIndex: 'createDate',
  686. },
  687. {
  688. title: '征订人',
  689. dataIndex: 'applicantUser',
  690. },
  691. {
  692. title: '书号(ISSN)',
  693. dataIndex: 'issn',
  694. },
  695. {
  696. title: '书名',
  697. dataIndex: 'bookName',
  698. },
  699. {
  700. title: '出版社',
  701. dataIndex: 'publishingHouse',
  702. },
  703. {
  704. title: '作者(主编)',
  705. dataIndex: 'editorInChief',
  706. },
  707. // {
  708. // title: '学科组',
  709. // dataIndex: 'subjectGroupIdCN',
  710. // },
  711. // {
  712. // title: '使用年级',
  713. // dataIndex: 'gradeName',
  714. // },
  715. {
  716. title: '使用班级',
  717. dataIndex: 'useClass',
  718. },
  719. {
  720. title: '对应课程',
  721. dataIndex: 'courseName',
  722. },
  723. // {
  724. // title: '规划教材',
  725. // dataIndex: 'isTextbookPlanCn',
  726. // },
  727. // {
  728. // title: '估价(元)',
  729. // dataIndex: 'appraisalPrice',
  730. // },
  731. {
  732. title: '学生用书征订数量',
  733. dataIndex: 'studentSubscriptionNumber',
  734. },
  735. {
  736. title: '教师教材用书征订数量',
  737. dataIndex: 'teacherSubscriptionNumber',
  738. },
  739. {
  740. title: '教师教参用书征订数量',
  741. dataIndex: 'teacherReferenceNumber',
  742. },
  743. // {
  744. // title: '有无配套资源',
  745. // dataIndex: 'isSupportResourcesCn',
  746. // },
  747. ];
  748. export const pushListColumns: BasicColumn[] = [
  749. {
  750. title: '入库时间',
  751. dataIndex: 'warehouseDate',
  752. },
  753. {
  754. title: '入库数量',
  755. dataIndex: 'warehouseNumber',
  756. },
  757. {
  758. title: '入库人员',
  759. dataIndex: 'warehouseUser',
  760. },
  761. {
  762. title: '来源',
  763. dataIndex: 'source',
  764. customRender: ({ text }) => {
  765. return text ? text : '/';
  766. },
  767. },
  768. ];
  769. export const popListColumns: BasicColumn[] = [
  770. {
  771. title: '出库时间',
  772. dataIndex: 'issueDate',
  773. },
  774. {
  775. title: '出库数量',
  776. dataIndex: 'issueNumber',
  777. },
  778. {
  779. title: '出库方式',
  780. dataIndex: 'issueMode',
  781. },
  782. {
  783. title: '出库人员',
  784. dataIndex: 'issueUser',
  785. },
  786. {
  787. title: '去处',
  788. dataIndex: 'remark',
  789. customRender: ({ text }) => {
  790. return text ? text : '/';
  791. },
  792. },
  793. ];
  794. export const receiveColumns: BasicColumn[] = [
  795. {
  796. title: '领取时间',
  797. dataIndex: 'claimDate',
  798. },
  799. {
  800. title: '领取人身份',
  801. dataIndex: 'claimIdentity',
  802. },
  803. {
  804. title: '班级',
  805. dataIndex: 'className',
  806. },
  807. {
  808. title: '领取人员',
  809. dataIndex: 'name',
  810. },
  811. {
  812. title: '学期',
  813. dataIndex: 'semesterName',
  814. },
  815. {
  816. title: '学号/工号',
  817. dataIndex: 'userName',
  818. },
  819. ];