<file_sep>const data = {
    　　"list":[
    　　　　{
    　　　　　　"adminDescription":"测试新系统",
    　　　　　　"amount":1,
    　　　　　　"assetId":"01740214-7429-400e-b220-a0e500cb93b2",
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"bakFeatureId":62,
    　　　　　　"categoryId":100201301401000102,
    　　　　　　"categoryIdString":100201301401000102,
    　　　　　　"categoryName":"台式电脑",
    　　　　　　"creator":"system",
    　　　　　　"curResourceCode":"A58010100000023",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB034764",
    　　　　　　"demanderName":"刘宇航",
    　　　　　　"depreciationReserve":0,
    　　　　　　"endDate":1493308800000,
    　　　　　　"feature":"苹果-iMac27",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827910569984,
    　　　　　　"gmtCreated":1411562350000,
    　　　　　　"gmtModified":1512617416000,
    　　　　　　"id":1083,
    　　　　　　"idString":"1083",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"macWired":"C02JD3B9DHJP",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"045424",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":17,
    　　　　　　"ouCode":"A58",
    　　　　　　"ouCompany":"阿里巴巴科技（北京）有限公司",
    　　　　　　"ouResourceCode":"TD010100050676",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO68868",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A58010100000023",
    　　　　　　"sn":"C02JD3B9DHJP",
    　　　　　　"startDate":1349712000000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":66,
    　　　　　　"user":"WB034764",
    　　　　　　"userName":"刘宇航",
    　　　　　　"vendorName":"浙江澳凌信息科技有限公司"
    　　　　},
    　　　　{
    　　　　　　"adminDescription":"重新分配标签-无",
    　　　　　　"amount":1,
    　　　　　　"assetId":"090ea2e1-56ff-42f5-ad43-9fc10010e190",
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"bakFeatureId":520780277996589060,
    　　　　　　"categoryId":100201301401000110,
    　　　　　　"categoryIdString":"100201301401000106",
    　　　　　　"categoryName":"显示器",
    　　　　　　"creator":"system",
    　　　　　　"curResourceCode":"T57100600000222",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"endDate":1513008000000,
    　　　　　　"feature":"其他-其他",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":520780277996589060,
    　　　　　　"gmtCreated":1411562350000,
    　　　　　　"gmtModified":1521093816000,
    　　　　　　"houseId":42,
    　　　　　　"id":6944,
    　　　　　　"idString":"6944",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"WB124379",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":9,
    　　　　　　"ouCode":"T57",
    　　　　　　"ouCompany":"浙江口碑网络技术有限公司",
    　　　　　　"ouResourceCode":"TD100600022157",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"T57100600000222",
    　　　　　　"sn":"CND71121SB",
    　　　　　　"startDate":1254326400000,
    　　　　　　"status":"Scrapped",
    　　　　　　"statusDetail":"CleanedUp",
    　　　　　　"statusDetailName":"已清理",
    　　　　　　"statusName":"报废",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":102,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":""
    　　　　},
    　　　　{
    　　　　　　"adminDescription":"66666666666test",
    　　　　　　"amount":1,
    　　　　　　"assetId":"0fb73d23-7e0b-4f14-92e8-a05100aa4897",
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"bakFeatureId":43,
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":100201301401000102,
    　　　　　　"categoryName":"台式电脑",
    　　　　　　"creator":"system",
    　　　　　　"curResourceCode":"B50010100003406",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"endDate":1520265600000,
    　　　　　　"feature":"联想-M4880",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827846377472,
    　　　　　　"gmtCreated":1411562350000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":12026,
    　　　　　　"idString":"12026",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":127,
    　　　　　　"ouCode":"B50",
    　　　　　　"ouCompany":"阿里巴巴(中国)网络技术有限公司",
    　　　　　　"ouResourceCode":"TD010100051492",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"B50010100003406",
    　　　　　　"sn":"EA01621218",
    　　　　　　"startDate":1180540800000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":130,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":""
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"endDate":1513094400000,
    　　　　　　"feature":"戴尔-E6220",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827717959680,
    　　　　　　"gmtCreated":1457073026000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5512824486166528,
    　　　　　　"idString":"5512824486166528",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000050",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028002",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"sn":"YUCT43",
    　　　　　　"startDate":1457073027000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001464",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1500048000000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523360000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527581038313472,
    　　　　　　"idString":"5527581038313472",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000132",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001464",
    　　　　　　"sn":"YUCT189",
    　　　　　　"startDate":1457523361000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A58030300000003",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1520265600000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523389000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527581987471360,
    　　　　　　"idString":"5527581987471360",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000184",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A58030300000003",
    　　　　　　"sn":"YUCT241",
    　　　　　　"startDate":1457523390000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001570",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1512748800000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523419000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527582966054912,
    　　　　　　"idString":"5527582966054912",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000238",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001570",
    　　　　　　"sn":"YUCT295",
    　　　　　　"startDate":1457523420000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001572",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1515859200000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523420000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527583001870336,
    　　　　　　"idString":"5527583001870336",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000240",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001572",
    　　　　　　"sn":"YUCT297",
    　　　　　　"startDate":1457523421000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001592",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1515859200000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523432000,
    　　　　　　"gmtModified":1515466147000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527583377522688,
    　　　　　　"idString":"5527583377522688",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"WB124379",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000260",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001592",
    　　　　　　"startDate":1457523432000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001603",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1513353600000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523438000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527583574982656,
    　　　　　　"idString":"5527583574982656",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000271",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001603",
    　　　　　　"sn":"YUCT328",
    　　　　　　"startDate":1457523438000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001605",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1513353600000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523439000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527583611125760,
    　　　　　　"idString":"5527583611125760",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000273",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001605",
    　　　　　　"sn":"YUCT330",
    　　　　　　"startDate":1457523439000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001609",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1515859200000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523441000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527583685312512,
    　　　　　　"idString":"5527583685312512",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000277",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001609",
    　　　　　　"sn":"YUCT334",
    　　　　　　"startDate":1457523442000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001616",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1515859200000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523445000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527583812878336,
    　　　　　　"idString":"5527583812878336",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000284",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001616",
    　　　　　　"sn":"YUCT341",
    　　　　　　"startDate":1457523446000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001622",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1515859200000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523448000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527583921340416,
    　　　　　　"idString":"5527583921340416",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000290",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001622",
    　　　　　　"sn":"YUCT347",
    　　　　　　"startDate":1457523449000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001623",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1515859200000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523449000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527583939821568,
    　　　　　　"idString":"5527583939821568",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000291",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001623",
    　　　　　　"sn":"YUCT348",
    　　　　　　"startDate":1457523449000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001624",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1515859200000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523449000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527583958040576,
    　　　　　　"idString":"5527583958040576",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000292",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001624",
    　　　　　　"sn":"YUCT349",
    　　　　　　"startDate":1457523450000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>.com====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001626",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1512921600000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523451000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527583994707968,
    　　　　　　"idString":"5527583994707968",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000294",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001626",
    　　　　　　"sn":"YUCT351",
    　　　　　　"startDate":1457523451000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001627",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1512921600000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523451000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527584012795904,
    　　　　　　"idString":"5527584012795904",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000295",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001627",
    　　　　　　"sn":"YUCT352",
    　　　　　　"startDate":1457523452000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"adminDescription":"TD10801000000296",
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001628",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1513008000000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523452000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527584030621696,
    　　　　　　"idString":"5527584030621696",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000296",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001628",
    　　　　　　"sn":"YUCT353",
    　　　　　　"startDate":1457523452000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001629",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1513008000000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523452000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527584048349184,
    　　　　　　"idString":"5527584048349184",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000297",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001629",
    　　　　　　"sn":"YUCT354",
    　　　　　　"startDate":1457523453000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001633",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1515859200000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523454000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527584120078336,
    　　　　　　"idString":"5527584120078336",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000301",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001633",
    　　　　　　"sn":"YUCT358",
    　　　　　　"startDate":1457523455000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001636",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1515859200000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523456000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527584173391872,
    　　　　　　"idString":"5527584173391872",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000304",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001636",
    　　　　　　"sn":"YUCT361",
    　　　　　　"startDate":1457523457000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001637",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1515859200000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523457000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527584191152128,
    　　　　　　"idString":"5527584191152128",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000305",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001637",
    　　　　　　"sn":"YUCT362",
    　　　　　　"startDate":1457523457000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001665",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1516118400000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523472000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527584697778176,
    　　　　　　"idString":"5527584697778176",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000333",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001665",
    　　　　　　"sn":"YUCT390",
    　　　　　　"startDate":1457523473000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001675",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1521734400000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523478000,
    　　　　　　"gmtModified":1521018302000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527584877445120,
    　　　　　　"idString":"5527584877445120",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"WB124379",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000343",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001675",
    　　　　　　"sn":"YUCT400",
    　　　　　　"startDate":1457523478000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001676",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1520265600000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523478000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527584895401984,
    　　　　　　"idString":"5527584895401984",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000344",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001676",
    　　　　　　"sn":"YUCT401",
    　　　　　　"startDate":1457523479000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001681",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1520265600000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523481000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527584986628096,
    　　　　　　"idString":"5527584986628096",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000349",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001681",
    　　　　　　"sn":"YUCT406",
    　　　　　　"startDate":1457523481000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001684",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1521302400000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523482000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527585040695296,
    　　　　　　"idString":"5527585040695296",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000352",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001684",
    　　　　　　"sn":"YUCT409",
    　　　　　　"startDate":1457523483000,
    　　　　　　"status":"Using",
    　　　　　　"statusDetail":"Normal",
    　　　　　　"statusDetailName":"正常",
    　　　　　　"statusName":"在用",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001690",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1520265600000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523486000,
    　　　　　　"gmtModified":1517488693000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527585150828544,
    　　　　　　"idString":"5527585150828544",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"WB124379",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000358",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001690",
    　　　　　　"sn":"YUCT415",
    　　　　　　"startDate":1457523486000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001697",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1520265600000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523490000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527585278197760,
    　　　　　　"idString":"5527585278197760",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000365",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001697",
    　　　　　　"sn":"YUCT422",
    　　　　　　"startDate":1457523490000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001698",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1520611200000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523490000,
    　　　　　　"gmtModified":1520233140000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527585296908288,
    　　　　　　"idString":"5527585296908288",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"WB124379",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000366",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001698",
    　　　　　　"sn":"YUCT423",
    　　　　　　"startDate":1457523491000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001704",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1520611200000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523494000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527585404026880,
    　　　　　　"idString":"5527585404026880",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000372",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001704",
    　　　　　　"sn":"YUCT429",
    　　　　　　"startDate":1457523494000,
    　　　　　　"status":"Stocking",
    　　　　　　"statusDetail":"Available",
    　　　　　　"statusDetailName":"可用",
    　　　　　　"statusName":"库存",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001715",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1522252800000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523500000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527585601257472,
    　　　　　　"idString":"5527585601257472",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000383",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001715",
    　　　　　　"sn":"YUCT440",
    　　　　　　"startDate":1457523500000,
    　　　　　　"status":"Using",
    　　　　　　"statusDetail":"Normal",
    　　　　　　"statusDetailName":"正常",
    　　　　　　"statusName":"在用",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　},
    　　　　{
    　　　　　　"amount":1,
    　　　　　　"bakCategoryName":"台式电脑",
    　　　　　　"categoryId":100201301401000100,
    　　　　　　"categoryIdString":"100201301401000101",
    　　　　　　"categoryName":"笔记本电脑",
    　　　　　　"creator":"System",
    　　　　　　"curResourceCode":"A50010200001717",
    　　　　　　"currentCost":0,
    　　　　　　"demander":"WB124379",
    　　　　　　"demanderName":"陆冬林",
    　　　　　　"depreciationReserve":0,
    　　　　　　"doNumber":"DO10007140",
    　　　　　　"endDate":1521302400000,
    　　　　　　"feature":"联想-X31",
    　　　　　　"featureDescription":"",
    　　　　　　"featureId":5300827537932288,
    　　　　　　"gmtCreated":1457523501000,
    　　　　　　"gmtModified":1464746999000,
    　　　　　　"houseId":42,
    　　　　　　"id":5527585636810752,
    　　　　　　"idString":"5527585636810752",
    　　　　　　"isDeleted":"n",
    　　　　　　"isFitting":"n",
    　　　　　　"isSafe":"n",
    　　　　　　"managerClass":"按件",
    　　　　　　"managerType":"it",
    　　　　　　"managerTypeName":"it",
    　　　　　　"modifier":"083568",
    　　　　　　"netCost":0,
    　　　　　　"newType":"购置",
    　　　　　　"originalCost":0,
    　　　　　　"ou":14,
    　　　　　　"ouCode":"A50",
    　　　　　　"ouCompany":"阿里巴巴（中国）有限公司",
    　　　　　　"ouResourceCode":"TD10801000000385",
    　　　　　　"owner":"WB124379",
    　　　　　　"ownerName":"陆冬林",
    　　　　　　"poNumber":"PO25028222",
    　　　　　　"reBorrowType":"日常临时借用",
    　　　　　　"reborrowCount":"0",
    　　　　　　"requestQty":0,
    　　　　　　"resourceCode":"A50010200001717",
    　　　　　　"sn":"YUCT442",
    　　　　　　"startDate":1457523501000,
    　　　　　　"status":"Using",
    　　　　　　"statusDetail":"Normal",
    　　　　　　"statusDetailName":"正常",
    　　　　　　"statusName":"在用",
    　　　　　　"storeHouseName":"员工库房",
    　　　　　　"useRemark":"4",
    　　　　　　"useRemarkName":"借用",
    　　　　　　"usedMonths":25,
    　　　　　　"user":"WB124379",
    　　　　　　"userName":"陆冬林",
    　　　　　　"vendorName":"洪著测试<EMAIL>====测试"
    　　　　}
    　　]
    }
    
    export default data;<file_sep>import * as React from 'react'
import * as ReactDOM from 'react-dom'
import SelfAddGoods from './selfAddGoods'
ReactDOM.render(
   <SelfAddGoods/>,
 document.getElementById('SelfAddGoods'))<file_sep>import * as ReactDOM from 'react-dom';
import ChangeSelectSubmit from './changeSelectSubmit';

ReactDOM.render(
	<ChangeSelectSubmit />,
	document.getElementById('changeSelectSubmit'),
);

<file_sep>function parseURL(url) {
	const a = document.createElement('a');
	a.href = url;
	return {
		source: url,
		protocol: a.protocol.replace(':', ''),
		host: a.hostname,
		port: a.port,
		query: a.search,
		params: (() => {
			const ret = {};
			const seg = a.search.replace(/^\?/, '').split('&');
			const len = seg.length;
			let i = 0;
			let s;
			for (;i < len; i++) {
				if (!seg[i]) { continue; }
				s = seg[i].split('=');
				ret[s[0]] = s[1];
			}
			return ret;
		})(),
	};
}

export default { parseURL };
<file_sep>import * as ReactDOM from 'react-dom';
import ChangeSelectAsset from './changeSelectAsset';

ReactDOM.render(
	<ChangeSelectAsset />,
	document.getElementById('changeSelectAsset'),
);

<file_sep>import Form from 'uxcore-form';
import Icon from 'uxcore-icon';
import './xujieSelect.less';

const { NumberInputFormField, Validators } = Form;
class XujieSelect extends React.Component {
	constructor(props) {
		super(props);
		this.formData = this.formData.bind(this);
	}
	formData() {
		return this.xujieTime.getValues().pass;
	}
	render() {
		// temp("temp", "日常临时借用", 30), project("project", "项目借用", 90), special("special", "双11,12专项", 90),
		const { data } = this.props;
		const { reBorrowType } = data.assetDescribe;
		const maxDay = reBorrowType === '日常临时借用' ? 30 : 90;
		return (
			<div className="xujie-select-box">
				<div className="top">
					<div className="img"><img alt="暂无图片" src={'/public/images/category_pic/' + data.assetDescribe.categoryIdString + '.jpg'} /></div>
					<div className="xujie-info">
						<p>名&nbsp;&nbsp;&nbsp;&nbsp;称：<span className="asset-name">{data.assetDescribe.categoryName}</span></p>
						<p>特&nbsp;&nbsp;&nbsp;&nbsp;征：<span>{data.assetDescribe.feature}</span></p>
						<p>借用类型：<span className="asset-user">{data.assetDescribe.reBorrowType}</span></p>
					</div>
				</div>
				<div className="bottom">
					<Form className="length-form" ref={(c) => { this.xujieTime = c; }} jsxonChange={this.props.xujieDayChange.bind(null, data.assetDescribe.id)}>
						<NumberInputFormField
							jsxname="cycle" 
							jsxlabel="续借时长" 
							jsxplaceholder="请填写"
							jsxrules={[
								{ validator: Validators.isNotEmpty, errMsg: '不能为空' },
								{ validator(value) { return value <= maxDay; }, errMsg: `最长${maxDay}天` },
							]} 
						/>
					</Form>
					<span className="time-tip">/天（最长可借用{maxDay}天）</span>
				</div>
				<div className="close-box">
					<Icon onClick={this.props.closeAsset.bind(null, data)} name="guanbi" className="close-btn" />
				</div>
			</div>
		);
	}
}
export default XujieSelect;
<file_sep>// Map转数组
function mapToArray(map) {
	const arr = [];
	map.forEach((value, key) => {
		arr.push({
			type: key,
			info: value,
		});
	});
	return arr;
}
// 对象转数组
function objToArray(obj) {
	const arr = Object.keys(obj).map((key) => ({
		text: obj[key], // [{}, {}]
		value: key, // 笔记本电脑
	}));
	return arr;
}

// 特殊情况，获取地点，text == value
function locationObjToArray(obj) {
	const arr = Object.keys(obj).map((key) => ({
		text: obj[key],
		value: obj[key],
	}));
	return arr;
}

// 字符串不足6为，前面补全
function stringFormat(str) {
	const { length } = str;
	if (length < 6) {
		const cha = 6 - length;
		for (let i = 0; i < cha; i += 1) {
			str = '0' + str.toString();
		}
	}
	return str;
}
export { mapToArray, objToArray, locationObjToArray, stringFormat };

<file_sep>import PropTypes from 'prop-types';
import classnames from 'classnames';
import TabPane from './TabPane';
import './Tabs.less';

class Tabs extends React.Component {
	constructor(props) {
		super(props);
		this.state = {
			inkBarWidth: 0,
			inkBarTranslate: 0,
			tabActiveIndex: 0, // 激活的tab
		};
		this.lastTabPos; // 第一个tab的位置，只需要开始保存下就可以
		this.tabIndex = 0;
	}

	componentDidMount() {
		// setTimeout(() => {
		// 	if (this.tab0) {
		// 		const firstTabRect = this.tab0.getBoundingClientRect();
		// 		this.lastTabPos = firstTabRect.left;
		// 		this.setState({
		// 			inkBarWidth: firstTabRect.width,
		// 		});
		// 	}
		// }, 10);
	}
	componentWillReceiveProps(newProps) {
		if (this.tab0 && this.tabIndex === 0) {
			this.tabIndex = 1;
			const firstTabRect = this.tab0.getBoundingClientRect();
			// this.lastTabPos = firstTabRect.left;
			this.setState({
				inkBarWidth: firstTabRect.width,
			});
		}
	}
	// 加载子元素
	processContent() {
		const me = this;
		const elements = React.Children.map(me.props.children, (child, index) => React.cloneElement(child, {}));
		return elements;
	}
	// 加载tab
	processTabNav() {
		const me = this;
		const TabsElement = React.Children.map(me.props.children, (child, index) => (
			<div 
				onClick={me.tabClick.bind(this, child.props.value, index)} 
				className={classnames('asset-tab-tab', {
					[`asset-tab-tab-${index}`]: true,
					'asset-tab-tab-active': this.state.tabActiveIndex === index,
				})}
				ref={(c) => { me[`tab${index}`] = c; }}
			>
				{child.props.tabNum == 0 ? '' : <div className="asset-tab-num">{child.props.tabNum }</div>}
				{child.props.tab}
			</div>
		));
		return TabsElement;
	}
	// tab点击
	tabClick(value, index, e) {
		const clickEle = e.target;
		const clickEleSize = clickEle.getBoundingClientRect();
		if (!this.lastTabPos) {
			this.lastTabPos = this.tab0.getBoundingClientRect().left;
		}
		// 获取宽度
		const eleWidth = clickEleSize.width;
		// 获取位置
		const eleLeft = clickEleSize.left;
		// 移动ink-bar
		// 计算差值，正值 右移。负值-左移动
		const inkBarCha = eleLeft - this.lastTabPos;
		this.setState({
			inkBarWidth: eleWidth,
			inkBarTranslate: inkBarCha,
			tabActiveIndex: index,
		});
		this.props.onTabClick(value);
	}
	render() {
		const inkBarWidth = this.state.inkBarWidth;
		const inkBarTranslate = this.state.inkBarTranslate;
		const inkBarStyle = {
			width: `${inkBarWidth}px`,
			transform: `translate3d(${inkBarTranslate}px, 0, 0)`,
		};
		return (
			<div className={classnames('asset-tab', {
				[this.props.type]: !!this.props.type,
			})}
			>
				<div className="asset-tab-nav-container">
					<div style={inkBarStyle} className="asset-tab-ink-bar" />
					{this.processTabNav()}
				</div>
				<div className="asset-tab-content">
					{this.processContent()[this.state.tabActiveIndex]}
				</div>
			</div>
		);
	}
}

Tabs.TabPane = TabPane;

Tabs.defaultProps = {
	onChange: () => {},
	onTabClick: () => {},
};

Tabs.propTypes = {
	onChange: PropTypes.func,
	onTabClick: PropTypes.func,
};

export default Tabs;
/**
 * componentDidMount  getBoundingClientRect   有问题。延时没问题
 * 
 */
<file_sep>import produce from 'immer';
import BigImg from 'lxq-react-zoom';
import moment from 'moment';

class TestImmer extends React.Component {
	constructor(props) {
		super(props);
		this.state = {};
	}
	componentDidMount() {
		console.log(moment(1523462400000).format('YYYY-MM-DD'));
		const obj = {
			a: 1,
			b: 2,
		};
		console.log(obj, '1');
		const obj4 = obj;
		obj4.a = '8';
		console.log(obj, '2');
		const arr = [{
			a: 1,
			b: {
				b1: 'b1',
			},
		}];
		
		const newObj = produce(obj, (draft) => {
			draft.a = 'a';
		});
		
		console.log(obj, 'obj');
		console.log(newObj, 'newObj');

		const newArr = produce(arr, draft => {
			draft[0].b.b1 = '333';
		});
		console.log(arr, 'arr');
		console.log(newArr, 'newArr');
		const newProxy = new Proxy(obj, {
			get(target, key) {
				console.log(target, key);
			},
		});
		newProxy.a;

		function testImmer(callback) {
			console.log(callback(obj), 'callback');
		}
		testImmer(produce((state) => {
			state.c = 9;
		}));
	}
	render() {
		return (
			<div>
				TestImmer
				<BigImg original="https://img.alicdn.com/tfs/TB1Jq7qmbSYBuNjSspiXXXNzpXa-1024-768.jpg" src="https://img.alicdn.com/tfs/TB1_ME1mf5TBuNjSspcXXbnGFXa-250-187.jpg" />
			</div>
		);
	}
}

export default TestImmer;
<file_sep>import Icon from 'uxcore-icon';
import Dialog from 'uxcore-dialog';
import Message from 'uxcore-message';
import Select from 'uxcore-select2';
import Button from 'uxcore-button';
import moment from 'moment';
import Form from 'uxcore-form';
import Table from 'uxcore-table';
import classnames from 'classnames';
import CheckboxGroup from 'uxcore-checkbox-group';
import ReplacePeople from 'components/ReplacePeople';
import Tabs from 'components/Tabs';
import Uploader from 'components/uploader';
import { http } from '../../lib/http';
import AssetDescribe from './assetDescribe';
import XujieSelect from './xujieSelect';
import Asset from './asset';
import { objToArray, locationObjToArray } from '../../lib/util';
import './borrow.less';

const TabPane = Tabs.TabPane;
const { Item } = CheckboxGroup;
const Option = Select.Option;
const {
	SelectFormField, 
	DateFormField, 
	TextAreaFormField, 
	SearchFormField,
} = Form;
const { TextAreaCount } = TextAreaFormField;
function sum(arr) {
	let result = 0;
	for (let i = 0; i < arr.length; i++) {
		result += arr[i];
	}
	return result;
}
// 处理续借列表返回的数据
function handleTableData(data) {
	return data.map((list) => ({
		assetDescribe: {
			categoryName: list.categoryName, // 名称
			feature: list.feature, // 特征
			userName: list.userName, // 使用人
			categoryIdString: list.categoryIdString, // 获取资产图片的id
			id: list.id,
			user: list.user,
			reBorrowType: list.reBorrowType,
		},
		assetLabel: {
			ouResourceCode: list.ouResourceCode, // 大阿里编号
			resourceCode: list.resourceCode, // 资产编号
			sn: list.sn, // 序列号
		},
		useCondition: {
			startDate: list.startDate, // 启用日期
			usedMonths: list.usedMonths, // 已使用月
			useRemarkName: list.useRemarkName, // 使用说明
		},
		workFlowName: list.workFlowName,
		workFlowType: list.workFlowType,
		instanceId: list.instanceId,
		resourceId: list.id,
		reBorrowType: list.reBorrowType,
		requestType: list.reBorrowType === '日常临时借用' ? 'temp' : list.reBorrowType === '项目借用' ? 'project' : 'special',
		reborrowCount: list.reborrowCount,
		idString: list.idString,
		// jsxchecked: true, // 这一列被选中
	}));
}
// 资源标签
const AssetLabel = (props) => (
	<div className="assetLabel-wrapper">
		<p>大阿里编号：{props.data.ouResourceCode}</p>
		<p>资&nbsp;产&nbsp;编&nbsp;号：{props.data.resourceCode}</p>
		<p>序&nbsp;&nbsp;&nbsp; 列&nbsp;&nbsp; 号：{props.data.sn}</p>
	</div>
);
// 使用情况
const AssetUseCondation = (props) => (
	<div className="assetLabel-condation">
		<p>启用日期：{props.data.startDate ? moment(props.data.startDate).format('YYYY-MM-DD') : ''}</p>
		<p>已使用月：{props.data.usedMonths}</p>
		<p>使用说明：{props.data.useRemarkName}</p>
	</div>
);
class Borrow extends React.Component {
	constructor(props) {
		super(props);
		this.state = {
			tabActive: '1',
			checkboxValue: '', // 代理人激活按钮
			replaceInputDisabled: true, // 代理人选择框状态
			citys: [], // 获取的城市
			selectCityCode: '', // 选择的城市
			parks: [], // 获取的园区
			selectParkCode: '', // 选择的园区
			locations: [], // 获取的地点
			selectLocationText: '', // 选择的地点
			locationId: '', // 选择的地点ID
			storeHouseId: '', // 选择的库房ID
			resEquipmentInfo: [], // 请求的资产列表
			categoryType: [], // 获取的所属类别
			categoryTypeId: '', // 哪一个Tab
			selectedAsset: [], // 选择的设备
			m4InfoDialog: false, // 资产box提示信息
			noDevice: false, // loading
			fileList: [], // 附件
			sureDisabled: false, // 提交申请
			borrowDay: '', // 最长可借用多少天
			resEquipmentXujie: [], // 资产续借列表
			selectXujie: [], // 已选续借
			fileListXujie: [],
			sureDisabledXujie: false,
			isShowXujie: true,
			is11: false, // 借用类型是不是双11
		};
		this.tabTranslateClick1 = this.tabTranslateClick1.bind(this);
		this.tabTranslateClick2 = this.tabTranslateClick2.bind(this);
		this.checkboxChange = this.checkboxChange.bind(this); // 激活按钮
		this.handleReplaceSelect = this.handleReplaceSelect.bind(this); // 选择代理人
		this.handleCityChange = this.handleCityChange.bind(this);
		this.handleParkChange = this.handleParkChange.bind(this);
		this.handleLocationChange = this.handleLocationChange.bind(this);
		this.obtainLocationId = this.obtainLocationId.bind(this);
		this.tabClick = this.tabClick.bind(this);
		this.radioOrCheckChange = this.radioOrCheckChange.bind(this);
		this.cancelAsset = this.cancelAsset.bind(this);
		this.add = this.add.bind(this);
		this.decrease = this.decrease.bind(this);
		this.borrowTypeChange = this.borrowTypeChange.bind(this);
		this.uploaderFileChange = this.uploaderFileChange.bind(this);
		this.submitSelect = this.submitSelect.bind(this);

		this.search = this.search.bind(this); // 搜索
		this.cancelXujie = this.cancelXujie.bind(this);
		this.uploaderFileChangeXujie = this.uploaderFileChangeXujie.bind(this);
		this.submitSelectXujie = this.submitSelectXujie.bind(this);
		this.xujieDayChange = this.xujieDayChange.bind(this);
		this.tabXujieHasClick = false;
		this.xujieUi = []; // 保存续借详情组件
	}
	componentDidMount() {
		// 获取城市
		http.get('/linkage/locationStoreMap/getCity.json').then((res) => {
			if (res.hasError) {
				Message.error(res.content, 3);
			} else {
				this.setState({
					citys: objToArray(res),
				});
			}
		});
		// 获取城市，园区，地点，提示元素
		this.cityPlaceholderEle = document.getElementsByClassName('select-city')[0].getElementsByClassName('kuma-select2-selection__placeholder')[0];
		this.parkPlaceholderEle = document.getElementsByClassName('select-park')[0].getElementsByClassName('kuma-select2-selection__placeholder')[0];
		this.locationPlaceholderEle = document.getElementsByClassName('select-location')[0].getElementsByClassName('kuma-select2-selection__placeholder')[0];
		// 获取所属类别
		new Promise((resolve) => {
			http.get('/newemployee/equipment/getCategoryType.json').then((res) => {
				this.setState({
					categoryType: res,
					categoryTypeId: res[0].id,
				});
				resolve(res[0].id);
			});
		}).then((categoryTypeId) => {
			this.requestAsset(categoryTypeId);
		});
	}
	// 资产借用tab
	tabTranslateClick1() {
		this.tabContent.style.transform = 'translateX(0)';
		this.tabBottom.style.transform = 'translateX(0)';
		this.setState({
			tabActive: '1',
		});
	}
	// 资产续借tab
	tabTranslateClick2() {
		this.tabContent.style.transform = 'translateX(-100%)';
		this.tabBottom.style.transform = 'translateX(104px)';
		if (this.state.resEquipmentXujie.length === 0 && !this.tabXujieHasClick) {
			this.requestAssetXujie();
			this.tabXujieHasClick = true;
		}
		this.setState({
			tabActive: '2',
		});
	}
	// 配置标准&&领用详情
	policyTip() {
		return (
			<Dialog
				title={<span><Icon name="jinggao-full" className="icon" />借用政策</span>}
				visible={this.state.m4InfoDialog}
				className="m4-info-dialog"
				footer={
					<Button onClick={() => {
						this.setState({
							m4InfoDialog: false,
						});
					}} 
					type="primary"
					>知道啦</Button>}
				onCancel={() => {
					this.setState({
						m4InfoDialog: false,
					});
				}}
			>
				<p>1、可借用场景：临时出差、临时会议、紧急项目需求。</p>
				<p>2、借用周期：个人借用最长一个月；项目借用最长3个月；都可以续借一次。</p>
				<p>3、借用规则：供借用的资产数量有限，一旦超出了借用池的数量，将不再提供借用。</p>
				<p>4、借用失效：借用审批通过后的1天内需完成领用，否则借用单将失效，需要重新提交。</p>
			</Dialog>
		);
	}
	// 获取资产
	/**
	 * 
	 * @param {} categoryTypeId 电脑 显示器
	 * @param {*} workNo 代理人的工号
	 */
	requestAsset(categoryTypeId, workNo = '', storeLocationMappingId = '') {
		this.setState({
			noDevice: false,
		});
		// 请求对应类别的设备信息
		http.get('/workflow/borrow/getEquipmentInfo.json?workFlowType=借用&categoryTypeId=' + categoryTypeId + '&enumWorkFlowType=Borrow&workNo=' + workNo + '&storeLocationMappingId=' + storeLocationMappingId).then((res) => {
			if (res.hasError) {
				Message.info(res.content, 2);
				this.setState({
					resEquipmentInfo: [],
					noDevice: true,
				});
			} else {
				this.setState({
					resEquipmentInfo: objToArray(res),
					noDevice: true,
				});
			}
		});
	}
	// 借用政策
	borrowPolicy() {
		return (
			<div className="change-policy">
				<Icon name="jinggao-full" className="icon" />
				<span className="policy">借用政策</span>
				<span onClick={() => { 
					this.setState({
						m4InfoDialog: true,
					});
				}} 
				className="info-tip"
				>[查看详情]
				</span>
			</div>
		);
	}
	// 代他人申请
	replaceBox() {
		return (
			<div className="replace-box">
				<div className="top">
					<CheckboxGroup onChange={this.checkboxChange} value={this.state.checkboxValue}>
						<Item text="代他人申请" value="replace" />
					</CheckboxGroup>
					<div className="replace-tip">*主管可代直接下属申请；直接上级主管相同的员工可相互代理</div>
				</div>
				<div className="bottom">
					<Form
						ref={(c) => { this.form_replace_person = c; }}
						jsxonChange={this.handleReplaceSelect}
					>
						<SelectFormField
							jsxdisabled={this.state.replaceInputDisabled}
							jsxplaceholder="选择代领人"
							jsxname="replacePerson"
							jsxfetchUrl="https://work.alibaba-inc.com/work/xservice/open/api/v1/suggestion/suggestionAt.jsonp"
							dataType="jsonp"
							className="replace-select"
							beforeFetch={(data) => {
								data.key = data.q;
								data.offset = 0;
								data.size = 8;
								data.accessToken = '<KEY>';
								return data;
							}}
							afterFetch={(obj) => {
								let data = null;
								data = obj.userList.map(item => ({
									text: <ReplacePeople userList={item} />,
									value: item.emplid, // 返回数据 key:
								}));
								return data;
							}}
						/>
					</Form>
				</div>
			</div>
		);
	}
	// 代理人激活框
	checkboxChange(value) {
		if (value.length === 2) { // 选中
			this.setState({
				checkboxValue: value,
				replaceInputDisabled: false,
			});
		} else {
			// 判断有没有选人，有--> 清空，触发数据
			// 没有--> 不触发数据
			const replacePerson = this.form_replace_person.getValues().values.replacePerson;
			if (replacePerson) { // 有人
				this.form_replace_person.resetValues(); // 清数据
				this.requestAsset(this.state.categoryTypeId);
			}
			this.setState({
				checkboxValue: value,
				replaceInputDisabled: true,
			});
		}
	}
	// 代理人选择，选了人后再去请求数据
	handleReplaceSelect(value) {
		this.requestAsset(this.state.categoryTypeId, value.replacePerson.key.padStart(6, '0'));
	}
	// 选择领用地点
	selectAddress() {
		return (
			<div className="step-1">
				<div className="step-title">第一步：选择新设备的领用地点</div>
				<span>领用地点</span>
				<Select onChange={this.handleCityChange} className="select-city" placeholder="城市">
					{this.state.citys.map((city) => (<Option value={city.value}>{city.text}</Option>))}
				</Select>
				<Select value={this.state.selectParkCode} onChange={this.handleParkChange} className="select-park" placeholder="园区">
					{this.state.parks.map((park) => (<Option value={park.value}>{park.text}</Option>))}
				</Select>
				<Select value={this.state.selectLocationText} onChange={this.handleLocationChange} className="select-location" placeholder="领用位置">
					{this.state.locations.map((location) => (<Option value={location.value}>{location.text}</Option>))}
				</Select>
			</div>
		);
	}
	// 选择城市，获取园区
	handleCityChange(value) {
		this.cityPlaceholderEle.setAttribute('style', 'opacity: 0');
		this.parkPlaceholderEle.style.opacity = 1; // 恢复提示
		this.locationPlaceholderEle.style.opacity = 1;
		this.setState({
			selectCityCode: value,
			selectParkCode: '', // 清空园区
			selectLocationText: '', // 清空地点 ps 清空值，也要清空下拉数据
			locations: [], // 清空地点下拉数据
			selectedAsset: [], // 清空选择的
		});
		http.get('/linkage/locationStoreMap/getPark.json?cityCode=' + value).then((res) => {
			this.setState({
				parks: objToArray(res),
			});
		});
	}
	// 选择园区，获取地点
	handleParkChange(value) {
		this.parkPlaceholderEle.style.opacity = 0;
		this.locationPlaceholderEle.style.opacity = 1;
		const cityCode = this.state.selectCityCode;
		this.setState({
			selectParkCode: value,
			selectLocationText: '', // 清空地点
			selectedAsset: [], // 清空选择的
		});
		http.get('/linkage/locationStoreMap/getLocation.json?cityCode=' + cityCode + '&parkCode=' + value).then((res) => {
			this.setState({
				locations: locationObjToArray(res),
			});
		});
	}
	// 选择领用地点
	handleLocationChange(text) {
		this.locationPlaceholderEle.style.opacity = 0;
		this.obtainLocationId(text);
		this.setState({
			selectLocationText: text,
			noDevice: false,
			selectedAsset: [], // 清空选择的
		});
	}
	// 选择完地点后，获取locationId和storeHouseId
	obtainLocationId(location) {
		const cityCode = this.state.selectCityCode;
		const parkCode = this.state.selectParkCode;
		// 这儿改变一次state，会重新渲染render
		http.get('/linkage/locationStoreMap/getLocation.json?cityCode=' + cityCode + '&parkCode=' + parkCode + '&location=' + location).then((res) => {
			this.setState({
				locationId: res.locationId,
				storeHouseId: res.storeHouseId,
			});
		
			// 传过去库房ID，请求资产
			// 要判断有没有选择代理人
			let workNo = '';
			const isReplaceDisabled = this.state.isReplaceDisabled; // false 选中
			if (!isReplaceDisabled) { // 选了
				const replacePerson = this.form_replace_person.getValues().values.replacePerson;
				workNo = replacePerson && replacePerson.key.padStart(6, '0');
			}
			// 这儿又一次改变一次state，导致又重新渲染一次render。子组件会执行render
			this.requestAsset(this.state.categoryTypeId, workNo, res.locationId);
		});
	}

	tabClick(key) {
		// 要判断有没有选择代理人
		let workNo = '';
		const isReplaceDisabled = this.state.isReplaceDisabled; // false 选中
		if (!isReplaceDisabled) { // 选了
			const replacePerson = this.form_replace_person.getValues().values.replacePerson;
			workNo = replacePerson && replacePerson.key.padStart(6, '0');
		}
		this.requestAsset(key, workNo);
		this.setState({
			categoryTypeId: key,
			// noDevice: false,
		});
	}
	deviceListItem(resEquipmentInfo) {
		if (resEquipmentInfo.length) {
			return (
				resEquipmentInfo.map((item) => (
					<div className="deviceList-box">					
						<div className="deviceList-title">{item.value}</div>
						<div className="deviceList-list">
							{item.text.map((assetInfo) => (
								<Asset
									is11={this.state.is11}
									selectLocationText={!!this.state.selectLocationText} // 是否选择了城市
									storeLocationMappingId={this.state.storeHouseId}
									add={this.add}
									decrease={this.decrease}
									radioOrCheckChange={this.radioOrCheckChange}
									resDeviceInfo={assetInfo}
									selectedAsset={this.state.selectedAsset.filter((list) => list.id === assetInfo.id)} // 选中的资产
									showDialogInfo={() => { this.setState({ m4InfoDialog: true }); }}
								/>
							))}
						</div>
					</div>
				))
			);
		}
		return '没有找到设备';
	}
	// 单选多选选择事件
	radioOrCheckChange(deviceInfo, value) {
		const borrowType = this.formSelectTime.getValues().values.borrowType;
		// 判断有没有选领用地点
		if (!this.state.selectLocationText) {
			Message.error('请选择领用地点！', 3);
			return;
		}
		if (deviceInfo.stockNumber <= 0 && borrowType !== '双11、12专项') {
			Message.error('设备无库存', 3);
			return;
		}
		if (value.length === 0) {
			this.cancelAsset(deviceInfo);
			return;
		}
		const selectedAsset = this.state.selectedAsset;
		// 先判断这个资产有没有选过
		const thisAsset = selectedAsset.filter((list) => list.id === deviceInfo.id);
		if (thisAsset.length) { // 选择过

		} else { // 没有选择过，直接push
			selectedAsset.push({ ...deviceInfo, num: 1, active: true });
		}
		this.setState({
			selectedAsset,
		});
	}
	// 取消选择
	cancelAsset(deviceInfo) {
		const selectedAsset = this.state.selectedAsset;
		const result = selectedAsset.filter((list) => list.id !== deviceInfo.id);
		this.setState({
			selectedAsset: result,
		});
	}
	// 增加
	add(deviceInfo, num) {
		// 双十一无
		const borrowType = this.formSelectTime.getValues().values.borrowType;
		if (deviceInfo.stockNumber <= num && borrowType !== '双11、12专项') {
			Message.error('数量不能大于库存量！', 3);
			return;
		}
		const selectedAsset = this.state.selectedAsset;
		const result = selectedAsset.map((list) => {
			if (list.id === deviceInfo.id) {
				return {
					...list,
					num: list.num + 1,
				};
			}
			return list;
		});
		this.setState({
			selectedAsset: result,
		});
	}
	// 减少
	decrease(deviceInfo) {
		const selectedAsset = this.state.selectedAsset;
		const result = selectedAsset.map((list) => {
			if (list.id === deviceInfo.id) {
				return {
					...list,
					num: list.num - 1 <= 0 ? 1 : list.num - 1,
				};
			}
			return list;
		});
		this.setState({
			selectedAsset: result,
		});
	}
	borrowTypeChange(values, name) {
		// 从双十一切换到别的，要清空
		if (name === 'borrowType') {
			this.setState({
				borrowDay: values.borrowType === '日常临时借用' ? 30 : 90,
				is11: values.borrowType === '双11、12专项',
				selectedAsset: [], // 清空选择的
			});
		}
	}
	// 上传附件
	uploaderFileChange(fileList) {
		const arr = fileList.map((list) => ({
			...list,
			response: {
				...list.response,
				data: {
					downloadUrl: list.response.path,
				},
			},
		}));
		this.setState({
			fileList: arr,
		});
	}
	// 提交申请
	submitSelect() {
		const me = this;
		// 判断有没有选领用地点
		if (!this.state.selectLocationText) {
			Message.error('请选择领用地点！', 3);
			return;
		}
		const locationId = this.state.locationId;
		const storeHouseId = this.state.storeHouseId;
		// 判断有没有选择设备
		const selectedAsset = this.state.selectedAsset;
		if (!selectedAsset.length) {
			Message.error('请选择领用的设备！', 3);
			return;
		}
		// 借用类型
		const formSelectTime = this.formSelectTime.getValues().values;
		const borrowType = formSelectTime.borrowType;
		if (!borrowType) {
			Message.error('请选择借用类型！', 3);
			return;
		}
		const borrowDate = formSelectTime.borrowDate;
		if (!borrowDate || borrowDate.length !== 2) {
			Message.error('请选择借用时间！', 3);
			return;
		}
		const borrowDay = this.state.borrowDay;
		if (this.formSelectTime.errors.borrowDate) {
			Message.error(`借用时间不能大于${borrowDay}天！`, 3);
			return;
		}
		
		// 有没有填写申请原因
		const reasonForm = this.formReason.getValues();
		const reasonData = reasonForm.values.reason;
		if (!reasonData) {
			Message.error('请填写申请原因！', 3);
			return;
		}
		if (!reasonForm.pass) {
			Message.error('申请原因不能超过字数限制！', 3);
			return;
		}
		// 代理人
		const replacePerson = this.form_replace_person.getValues().values.replacePerson;
		const principleWorkId = replacePerson ? replacePerson.key.padStart(6, '0') : '';
		// 附件
		// 附件
		const attachments = this.state.fileList.filter((file) => file.type !== 'delete').map((file) => ({
			...file.response,
			$model: {
				...file.response,
			},
			$events: {},
			$skipArray: true,
			$accessors: {},
			$1520219871783: [],
		}));
		this.setState({
			sureDisabled: true,
		});
		const items = selectedAsset.map((list) => (
			{
				categoryAndFetureId: list.ampCategoryId,
				equipmentConfigureId: list.idString,
				categoryId: list.ampCategoryId,
				categoryName: list.ampCategory,
				stock: borrowType === '双11、12专项' ? '充足' : list.stockNumber,
				requestStartDate: moment(borrowDate[0]).format('YYYY-MM-DD'),
				requestEndDate: moment(borrowDate[1]).format('YYYY-MM-DD'),
				requestAmount: list.num,
			}
		));
		const jsonData = {
			formType: 'Borrow',
			principleWorkId,
			locationId: storeHouseId,
			storeLocationMappingId: locationId,
			reason: reasonData + '(' + borrowType + ')',
			items,
		};
		http.get('/workflow/event/applyBorrowValidate.json?jsonData=' + JSON.stringify(jsonData) + '&attachments=' + JSON.stringify(attachments)).then((res) => {
			if (res.hasError) {
				Dialog.info({
					title: '提示',
					content: res.errors[0].msg,
					onOk() {
						me.submit(jsonData, attachments);
					},
				});
			} else {
				me.submit(jsonData, attachments);
			}
		});
	}
	// submit
	submit(jsonData, attachments) {
		http.get('/workflow/event/applyAssetBorrow.json?jsonData=' + JSON.stringify(jsonData) + '&attachments=' + JSON.stringify(attachments)).then((res) => {
			this.setState({
				sureDisabled: false,
			});
			if (!res.hasError) {
				window.location.href = '/workflow/task/mysubmit.htm';
			}
		});
	}
	// 搜索
	search() {
		const searchContent = this.form_select_Asset.getValues().values.search_content;
		this.requestAssetXujie(searchContent && searchContent.main);
	}
	// 加载续借资产列表
	requestAssetXujie(searchContent) {
		this.setState({
			isShowXujie: true,
		});
		http.get('/workflow/borrow/getBorrowAssets.json', {
			params: {
				search_content: searchContent, // undefined 不会传
			},
		}).then((res) => {
			this.setState({
				resEquipmentXujie: handleTableData(res.list),
				isShowXujie: false,
			});
		});
	}
	xujieDayChange(id, values) {
		this.setState({
			selectXujie: this.state.selectXujie.map((list) => {
				if (list.assetDescribe.id === id) {
					return {
						...list,
						cycle: values.cycle,
					};
				}
				return {
					...list,
				};
			}),
		});
	}
	// 续借取消选择
	cancelXujie(data) {
		this.xujieUi = this.xujieUi.filter((list) => list.props.data.assetDescribe.id !== data.assetDescribe.id);
		this.setState({
			selectXujie: this.state.selectXujie.filter((list) => list.assetDescribe.id !== data.assetDescribe.id),
			resEquipmentXujie: this.state.resEquipmentXujie.map((list) => {
				if (data.assetDescribe.id === list.assetDescribe.id) {
					return {
						...list,
						jsxchecked: false,
					};
				}
				return {
					...list,
				};
			}),
		});
	}
	uploaderFileChangeXujie(fileList) {
		const arr = fileList.map((list) => ({
			...list,
			response: {
				...list.response,
				data: {
					downloadUrl: list.response.path,
				},
			},
		}));
		this.setState({
			fileListXujie: arr,
		});
	}
	// 续借提交
	submitSelectXujie() {
		// 判断有没有选择续借设备
		const { selectXujie } = this.state;
		if (selectXujie.length === 0) {
			Message.error('请选择续借设备！', 3);
			return;
		}
		// 判断有没有填写续借时长
		const formXujie = [];
		this.xujieUi.forEach((xujie) => {
			formXujie.push(xujie.formData());
		});
		if (formXujie.indexOf(false) !== -1) {
			return;
		}
		// 申请原因
		const reasonForm = this.formReasonXujie.getValues();
		const reasonData = reasonForm.values.reason;
		if (!reasonData) {
			Message.error('请填写申请原因！', 3);
			return;
		}
		if (!reasonForm.pass) {
			Message.error('申请原因不能超过字数限制！', 3);
			return;
		}
		this.setState({
			sureDisabledXujie: true,
		});
		// 附件
		const attachments = this.state.fileListXujie.filter((file) => file.type !== 'delete').map((file) => ({
			...file.response,
			$model: {
				...file.response,
			},
			$events: {},
			$skipArray: true,
			$accessors: {},
			$1520219871783: [],
		}));
		const jsonData = {
			formType: 'ReBorrow',
			reason: reasonData,
			items: this.state.selectXujie.map((list) => ({
				resourceId: list.idString,
				cycle: list.cycle,
				requestType: list.requestType,
				requestAmount: 1,
			})),
		};
		http.get('/workflow/borrow/ReBorrowSubmit.json?jsonData=' + JSON.stringify(jsonData) + '&attachments=' + JSON.stringify(attachments)).then((res) => {
			if (res.hasError) {
				Message.error(res.content, 3);
			} else {
				window.location.href = '/workflow/task/mysubmit.htm';
			}
		});
	}
	render() {
		const me = this;
		const rowSelection = {
			onSelect(record, selected, selectedRows) {
				// me.xujieUi = [];
				me.setState({
					selectXujie: selectedRows,
					resEquipmentXujie: me.state.resEquipmentXujie.map((list) => {
						if (list.assetDescribe.id === selected.assetDescribe.id) {
							return {
								...list,
								jsxchecked: record,
							};
						}
						return {
							...list,
						};
					}),
				});
			},
			onSelectAll(selected, selectedRows) {
				// me.xujieUi = [];
				me.setState({
					selectXujie: selectedRows,
					resEquipmentXujie: me.state.resEquipmentXujie.map((list) => ({
						...list,
						jsxchecked: selected,
					})),
				});
			},
			isDisabled(rowData) {
				if (rowData.reborrowCount === '0') {
					return false;
				}
				return true;
			},
		};
		const columns = [
			{
				dataKey: 'assetDescribe',
				title: '资源描述',
				width: 249,
				render: (data) => (<AssetDescribe data={data} />),
			}, {
				dataKey: 'assetLabel',
				title: '资源标签',
				width: 245,
				message: <span>大阿里编号：号码为<font style={{ color: 'red' }}>TD</font>开头的标签。<br />资产标签：号码为<font style={{ color: 'red' }}>T50</font>或<font style={{ color: 'red' }}>B50</font>等等开头的标签。<br />电脑上贴的标签号码只要与前面2个中的其中1个对的上就可以了。</span>,
				render: (data) => (<AssetLabel data={data} />),
			}, {
				dataKey: 'useCondition',
				title: '使用情况',
				width: 165,
				render: (data) => (<AssetUseCondation data={data} />),
			}, {
				dataKey: 'reBorrowType',
				title: '借用类型',
			}, {
				dataKey: 'reborrowCount',
				title: '状态',
				render: (data) => (data === '0' ? '可借用' : '已借用' + data + '次'),
			},
		];
		const renderProps = {
			height: 600,
			jsxdata: { data: this.state.resEquipmentXujie },
			rowSelection,
			jsxcolumns: columns,
		};
		this.xujieUi = []; // 每次都要清空
		return (
			<div className="page-borrow">
				{this.policyTip()}
				<div className="borrow-title">
					<span>资产借用申请单</span>
				</div>
				<div className="tab-wrapper">
					<div className="tab-bar">
						<div onClick={this.tabTranslateClick1} className={classnames('tab-bar-ink', { active: this.state.tabActive === '1' })}>资产借用</div>
						<div onClick={this.tabTranslateClick2} className={classnames('tab-bar-ink', { active: this.state.tabActive === '2' })}>资产续借</div>
						<div ref={(c) => { this.tabBottom = c; }} className="tab-bottom" />
					</div>
					<div ref={(c) => { this.tabContent = c; }} className="tab-content">
						<div className="tab1">
							{this.borrowPolicy()}
							{this.replaceBox()}
							{this.selectAddress()}
							<div className="step-3">
								{this.state.borrowDay ? <span className="max-date">（最长可借用{this.state.borrowDay}天）</span> : ''}
								<div className="step-title">第二步：选择借用时间</div>
								<Form ref={(c) => { this.formSelectTime = c; }} jsxonChange={this.borrowTypeChange}>
									<SelectFormField jsxname="borrowType" jsxlabel="借用类型" jsxdata={[{ value: '日常临时借用', text: '日常临时借用' }, { value: '项目借用', text: '项目借用' }, { value: '双11、12专项', text: '双11、12专项' }]} />
									<DateFormField jsxrules={[{ validator(value) { if (value && value[1] && me.state.borrowDay) { return moment(value[1]).diff(moment(value[0]), 'days') < me.state.borrowDay; } return true; }, errMsg: '借用时长大于最长借用时长！' }]} jsxname="borrowDate" jsxlabel="借用时间" jsxtype="cascade" />
								</Form>
							</div>
							<div className="step-2">
								<div className="step-title">第三步：选择领用的设备</div>
								<div className="tab-box">
									{this.state.noDevice ? '' : <div className="tab-loader-box">
										<img alt="" src="https://aliwork.alicdn.com/tps/TB1fPYRMXXXXXcdXFXXXXXXXXXX-480-238.svg" />
									</div>}
									<Tabs type="stand" onTabClick={this.tabClick}>
										{this.state.categoryType.map((item) => (<TabPane tabNum={sum(this.state.selectedAsset.filter((list) => list.categoryType === item.name).map((list) => list.num))} tab={item.name} value={item.id}>
											{this.deviceListItem(this.state.resEquipmentInfo)}
										</TabPane>))}
									</Tabs>
								</div>
							</div>
							{/* 选择详情 */}
							<div className="select-info-box">
								{this.state.selectedAsset.length ? <div className="select-info-title">已选设备：</div> : ''}
								<div className="select-info">
									{this.state.selectedAsset.map((selectAsset) => (
										<div className="select-info-list">
											<Asset 
												radioOrCheck="none" 
												showClose 
												closeAsset={this.cancelAsset} 
												resDeviceInfo={selectAsset} 
												add={this.add}
												decrease={this.decrease}
												selectedAsset={this.state.selectedAsset.filter((list) => list.id === selectAsset.id)}
											/>
										</div>
									))}
								</div>
							</div>
							
							<div className="step-4">
								<div className="step-title">第四步：填写申请原因</div>
								<Form
									ref={(c) => { this.formReason = c; }}
								>
									<TextAreaFormField 
										jsxname="reason" 
										jsxplaceholder="请详细描述需求原因，减少审批人员的二次沟通；描述不清楚的需求，资产审批人员可能会直接驳回哦！" 
										jsxrules={[
											{ validator(value) { return value ? value.length <= 256 : true; }, errMsg: '仅限256个字符' },
										]}
									>
										<TextAreaCount total={256} />
									</TextAreaFormField>
								</Form>
							</div>
							{/* 添加附件 */}
							<div className="add-file">
								<Uploader
									isOnlyImg={false}
									multiple
									name="assetUploadFile"
									fileList={this.state.fileList}
									url="/workflow/common/uploadFile.do"
									onChange={this.uploaderFileChange}
								/>
							</div>
							<div className="btn-box">
								<Button disabled={this.state.sureDisabled} onClick={this.submitSelect}>提交申请</Button>		
							</div>
						</div>
						<div className="tab2">
							{this.borrowPolicy()}
							<div className="select-box">
								<div className="select-form-label">搜索</div>
								<Form ref={(c) => { this.form_select_Asset = c; }}>
									<SearchFormField
										jsxname="search_content"
										tidy
										placeholder="资产编号/大阿里编号/序列号"
										onIconClick={this.search}
									/>
								</Form>		
							</div>
							<div className="table-box">
								{this.state.isShowXujie ? <div className="xujieLoading">
									<img alt="" src="https://img.alicdn.com/tfs/TB132EFhntYBeNjy1XdXXXXyVXa-64-64.gif" />
								</div> : ''}
								<Table {...renderProps} />
							</div>
							<div className="xujie-select-info">
								{this.state.selectXujie.length ? <div className="select-info-title">已选设备：</div> : ''}
								<div className="select-info">
									{this.state.selectXujie.map((list) => ( 
										<XujieSelect ref={(c) => { c && this.xujieUi.push(c); }} data={list} closeAsset={this.cancelXujie} xujieDayChange={this.xujieDayChange} />
									))}
								</div>
							</div>
							{/* 第三步填写申请原因 */}
							<div className="reason-box step-4">
								<div className="step-title">请填写续借原因</div>
								<Form
									ref={(c) => { this.formReasonXujie = c; }}
								>
									<TextAreaFormField 
										jsxname="reason" 
										jsxplaceholder="请详细描述需求原因，减少审批人员的二次沟通；描述不清楚的需求，资产审批人员可能会直接驳回哦！" 
										jsxrules={[
											{ validator(value) { return value ? value.length <= 256 : true; }, errMsg: '仅限256个字符' },
										]}
									>
										<TextAreaCount total={256} />
									</TextAreaFormField>
								</Form>
							</div>
							{/* 添加附件 */}
							<div className="add-file">
								<Uploader
									isOnlyImg={false}
									multiple
									name="assetUploadFile"
									fileList={this.state.fileListXujie}
									url="/workflow/common/uploadFile.do"
									onChange={this.uploaderFileChangeXujie}
								/>
							</div>
							<div className="btn-box">
								<Button disabled={this.state.sureDisabledXujie} onClick={this.submitSelectXujie}>提交申请</Button>		
							</div>
						</div>
					</div>
				</div>
			</div>
		);
	}
}

export default Borrow;
// temp("temp", "日常临时借用", 30), project("project", "项目借用", 90), special("special", "双11,12专项", 90),
// 城市切换，选择的数据清空
// 借用类型切换
<file_sep>/**
 *  自助柜补货
 *  author 刘玄清
 *  2018-2-1
 *  日常 0.1.1
 *  线上 0.0.8
 */

import Button from 'uxcore-button';
import Form from 'uxcore-form';
import Table from 'uxcore-table';
import Dialog from 'uxcore-dialog';
import RadioGroup from 'uxcore-radiogroup';
import moment from 'moment';
import ReplacePeople from 'components/ReplacePeople';
import { http } from '../../lib/http';
import './selfAddGoods.less';

const { Constants } = Table;
const Message = require('uxcore-message'); // 全局提醒
// 本地开发 true
// 线上false
// 导航没有margin
// 内容 内边距20px
const { Item } = RadioGroup;
const {
	InputFormField: Input,
	SelectFormField,
	FormRow: Row,
	TextAreaFormField: TextArea,
} = Form;

// 提示信息
function errorTip(type, msg) {
	Message[type](msg, 3);
}

// 时间格式化
function timeFormat(time) {
	return moment(time).format('YYYY-MM-DD HH:mm:ss');
	// 1注意不传字段时也会返回显示时间，要处理下
	// 2 H 24小时制  h 12小时制
}

// 字符串不足6为，前面补全
function stringFormat(str) {
	const { length } = str;
	if (length < 6) {
		const cha = 6 - length;
		for (let i = 0; i < cha; i += 1) {
			str = '0' + str.toString();
		}
	}
	return str;
}

class SelfAddGoods extends React.Component {
	constructor(props) {
		super(props);
		this.state = {
			selectFormData: '', // 查询表单值
			createGoodsDialogVisible: false, // 创建补货单弹窗的显示
			dialogRadioValue: 'ou', // 补货单弹窗单选按钮的值
			createErrorVisible: false, // 补货失败弹窗的显示
			createFeedbackInfo: '', // 补货反馈信息
			operatorInput: false, // 是否显示操作人
			accessToken: '', // 获取accessToken
		};
		this.formPreValue = null; // 判断两次的表单值有没有变化
		this.form_create = null;
	}
	componentDidMount() {
		// 调用是否显示操作人
		http.get('/admin/replenish/hiddenOperator.json').then((res) => {
			if (res.hidden) { // 隐藏
				this.setState({
					operatorInput: false,
				});
			} else {
				this.setState({
					operatorInput: true,
					accessToken: res.accessToken,
				});
			}
		});
	}

	// 查询
	selectClick() {
		const me = this;
		const formData = me.form.getValues().values;
		if (window._.isEqual(formData, this.formPreValue)) { // 相等
			this.tableE.fetchData(); // 如果每次都更新数据 会有异常
		} else {
			me.setState({
				selectFormData: formData,
			});
			this.formPreValue = formData;
		}
	}
	// 创建补货单弹窗
	createClick() {
		this.form_create && this.form_create.resetValues(); // 清空表单文本域
		this.setState({
			createGoodsDialogVisible: true,
			dialogRadioValue: 'ou', // 重置按钮
		});
	}

	// 补货单弹窗单选按钮
	dialogRadioChange(value) {
		this.setState({
			dialogRadioValue: value,
		});
	}

	// 创建补货单提交
	submitCreate() {
		const strType = this.state.dialogRadioValue;
		const textArea = this.form_create.getValues().values.create;
		this.setState({
			createFeedbackInfo: '',
		});
		if (!textArea) { // 没有输入补货单
			errorTip('info', '标签不能为空！');
			return;
		}
		const assetCodes = textArea.split('\n').join(',');
		http.post('/admin/replenish/addReplenish.json?assetCodes=' + assetCodes + '&strType=' + strType).then((res) => {
			if (res.hasError) { // 失败
				errorTip('error', res.errors[0].msg, 3);
			} else {
				this.setState({
					createFeedbackInfo: res, // 反馈信息
					createErrorVisible: true, // 显示反馈弹窗
					createGoodsDialogVisible: false, // 隐藏创建弹窗
				});
			}
		});
	}

	// 补货异常
	createError() {
		const { createFeedbackInfo } = this.state;
		const errorTotal = createFeedbackInfo.errSum;
		return (
			<Dialog
				title="补货信息反馈"
				className="create-feedback"
				visible={this.state.createErrorVisible}
				footer={[
					<Button onClick={this.errorDaochu.bind(this, errorTotal)} key="submit" size="small">{errorTotal === 0 ? '确定' : '确认并导出异常详情'}</Button>,
				]}
				onCancel={() => {
					this.setState({
						createErrorVisible: false,
					});
				}}
				width={300}
			>
				<div>成功：{createFeedbackInfo.success}条</div>
				<div>失败：{errorTotal}条</div>
			</Dialog>
		);
	}
	// 异常导出
	errorDaochu(errorTotal) {
		if (errorTotal === 0) { // 没有
			this.setState({
				createErrorVisible: false,
			});
			this.tableE.fetchData();
		} else {
			window.open('/admin/replenish/getResultExcel.json?data=' + JSON.stringify(this.state.createFeedbackInfo));
			this.setState({
				createErrorVisible: false,
			});
		}
	}
	// 撤销补货
	cancelReplenish(rowData, table) {
		Dialog.confirm({
			title: '您确定要撤销补货吗？',
			content: '撤销补货后，资产将存入“调出库房”；\n请您将实物也同步存入“调出库房”。',
			onOk() {
				http.post('/admin/replenish/cancelReplenish.json?id=' + rowData.id).then((res) => {
					if (res.hasError) {
						Message.error(res.errors[0].msg, 3);
					} else {
						Message.success(res.content, 3);
						table.fetchData(); // 更新表格数据
					}
				});
			},
			onCancel() {},
		});
	}

	// 格式化表格数据
	tableBackData(tableData) {
		return {
			...tableData,
			data: tableData.data.map(item => ({
				...item,
				__mode__: (item.replenishStatus === 'CANCEL' || item.replenishStatus === 'REPLENISHED') ? 'CANCEL' : 'view',
				gmtCreated: item.gmtCreated && timeFormat(item.gmtCreated),
				replenishDate: item.replenishDate && timeFormat(item.replenishDate),
				cancelDate: item.cancelDate && timeFormat(item.cancelDate),
				replenishStatus: item.replenishStatus === 'REPLENISHING' ? '补货中' : item.replenishStatus === 'REPLENISHED' ? '补货完成' : item.replenishStatus === 'CANCEL' ? '撤销' : '',
			})),
		};
	}

	render() {
		const me = this;
		const { selectFormData } = this.state;
		// 列配置项
		const columns = [
			{
				dataKey: 'assetCode',
				title: '资产编号', // 表头
				width: 130,
			},
			{
				dataKey: 'resourceCode', // 匹配的字段
				title: '大阿里编号',
				width: 150,
			},
			{
				dataKey: 'assetName',
				title: '资产类目',
				width: 80,
			},
			{
				dataKey: 'featureName',
				title: '特征',
				width: 100,
			},
			{
				dataKey: 'useRemark',
				title: '使用说明',
				width: 80,
			},
			{
				dataKey: 'storePosition',
				title: '调出库房',
				width: 220,
			},
			{
				dataKey: 'cabinetProperty',
				title: '存入的自助柜',
				width: 220,
			},
			{
				dataKey: 'operatorName',
				title: '操作人',
				width: 150,
			},
			{
				dataKey: 'gmtCreated',
				title: '创建时间',
				width: 150,
			},
			{
				dataKey: 'replenishDate',
				title: '存柜时间',
				width: 150,
			},
			{
				dataKey: 'replenishStatus',
				title: '补货状态',
				width: 80,
			},
			{
				dataKey: 'cancelDate',
				title: '撤销时间',
				width: 150,
			},
			{
				dataKey: 'action',
				title: '操作',
				width: 80,
				type: 'action',
				actions: [
					{
						title: '撤销',
						callback: me.cancelReplenish.bind(this),
						mode: Constants.MODE.VIEW,
					},
				],
			},
		];
		const renderProps = {
			height: 650,
			width: 1140,
			fetchUrl: '/admin/replenish/listReplenish.json',
			jsxcolumns: columns,
			showPager: true,
			showPagerTotal: true,
			fetchParams: { // 请求数据参数
				assetCode: selectFormData.assetCodes,
				operator: selectFormData.operator && stringFormat(selectFormData.operator.key),
				status: selectFormData.status === 'all' ? '' : selectFormData.status,
			},
			processData: me.tableBackData.bind(this),
			className: 'table-container',
			doubleClickToEdit: false,
		};
		return (
			<div className="page-selfAddGoods">
				<div className="page-inner">
					<div className="title">
						<span>自助柜补货</span>
					</div>
					<div className="select-area">
						<Form
							ref={(c) => { this.form = c; }}
							className="select-from"
							jsxvalues={{
								status: 'all',
							}}
						>
							<Row>
								<Input allowClear jsxname="assetCodes" jsxlabel="编号查询：" jsxplaceholder="资产编号\大阿里编号\序列号" />
								{this.state.operatorInput ? (
									<SelectFormField
										jsxname="operator"
										allowClear
										jsxlabel="操作人："
										jsxplaceholder=""
										jsxfetchUrl="https://work.alibaba-inc.com/work/xservice/open/api/v1/suggestion/suggestionAt.jsonp"
										dataType="jsonp"
										className="oprater-select"
										beforeFetch={(data) => {
											data.key = data.q;
											data.offset = 0;
											data.size = 8;
											data.accessToken = me.state.accessToken;
											return data;
										}}
										afterFetch={(obj) => {
											let data = null;
											data = obj.userList.map(item => ({
												text: <ReplacePeople userList={item} />,
												value: item.emplid, // 返回数据 key:
											}));
											return data;
										}}
									/>) : ''}
								<SelectFormField
									jsxname="status"
									jsxlabel="补货状态："
									className="select-status"
									jsxdata={[
										{ value: 'REPLENISHING', text: '补货中' },
										{ value: 'REPLENISHED', text: '完成' },
										{ value: 'CANCEL', text: '撤销' },
										{ value: 'all', text: '全部' },
									]}
								/>
							</Row>
						</Form>
						<Button onClick={me.selectClick.bind(me)} className="select-btn">查 询</Button>
						<Button onClick={me.createClick.bind(me)} className="select-btn-create">创建补货单</Button>
						<Dialog title="创建补货单"
							visible={this.state.createGoodsDialogVisible}
							className="create-dialog"
							onOk={me.submitCreate.bind(me)}
							onCancel={() => {
								this.setState({
									createGoodsDialogVisible: false,
								});
							}}
						>
							<RadioGroup className="radio_select" value={me.state.dialogRadioValue} onChange={me.dialogRadioChange.bind(me)}>
								<Item value="ou" text="大阿里编号" />
								<Item value="assetcode" text="资产编号" />
							</RadioGroup>
							<Form ref={(c) => { this.form_create = c; }} className="dialog_form">
								<TextArea jsxname="create" jsxplaceholder="一个标签占一行，用回车换行" jsxshowLabel={false} />
							</Form>
						</Dialog>
						{this.createError()}
					</div>
					<div className="content-list">
						<Table ref={(c) => { this.tableE = c; }} {...renderProps} />
					</div>
				</div>
			</div>
		);
	}
}

export default SelfAddGoods;

/**
 * 查询 注意表单为空的情况
 * dialog 按钮value改变 可以用自定义footer
 * From jsxvalues 默认值 匹配每个jsxname
 * merge 本地
 * dialog 使用自定义footer 确认取消时间要自己加
 * 表格默认行内编辑
 * 查询每次都可更新数据，如果两次数据一样，只执行更新表格数据；如果不一样则更新state来更显表格数据
 * 下载 window.open(接口)
 * state改变 重新刷新 render ，render所有的都会执行
 * 不管state值两次有没有变化，执行setState都会触发render渲染
 * table 可能是参数两次一样不会调用接口更新数据
 * table默认可双击，进入编辑状态，操作按钮会消失  doubleClickToEdit: false
 * 在daily执行tag
 * tag 自动删除当前分支
 * 先创建一个新分支，git pull origin master
 */
<file_sep>import * as React from 'react';
import * as ReactDOM from 'react-dom';
import SelfUse from './selfUse';

ReactDOM.render(
	<SelfUse />,
	document.getElementById('SelfUse'),
);
<file_sep>import Popover from 'uxcore-popover';
import { http } from '../../lib/http';
import './peoplePop.less';

class PeoplePop extends React.Component {
	constructor(props) {
		super(props);
		this.state = {
			personInfo: {}, // 员工信息
		};
		this.handleMouseOver = this.handleMouseOver.bind(this);
	}
	// 鼠标悬浮获取员工信息
	handleMouseOver(workNum) {
		http.get('/workflow/myassets/nikeName.json?workNo=' + workNum).then((res) => {
			this.setState({
				personInfo: res,
			});
		});
	}
	render() {
		const { 
			person,
			peopleIcon,
			showLine,
		} = this.props;
		const { personInfo } = this.state;
		const overlay = (
			<div className="peopleInfoContent">
				<p>部门：{personInfo.deptName}</p>
				<table>
					<tbody>
						<tr>
							<td>职位：{personInfo.postName}</td>
							<td>工号：{personInfo.workNo}</td>
						</tr>
						<tr>
							<td>分机：{personInfo.indirectPhone}</td>
							<td>手机：{personInfo.mobile}</td>
						</tr>
						<tr>
							<td>旺旺：{personInfo.wangwang}</td>
							<td>邮箱：<a href={`mailto:${personInfo.email}`}>{personInfo.email}</a></td>
						</tr>
					</tbody>
				</table>
			</div>
		);
		if (person === '资产小助手') {
			return <span>资产小助手</span>;
		}
	
		if (Object.prototype.toString.call(person) === '[object Array]') {
			if (showLine) {
				const perNameNumShowLine = person[0].split(',');
				return (<Popover placement="bottom" overlay={overlay}>
					<a className="personPop" href={`https://work.alibaba-inc.com/u/${perNameNumShowLine[1]}`} target="_blank">
						<span onMouseOver={() => this.handleMouseOver(perNameNumShowLine[1])} className={`${this.props.className || ''}`}>{peopleIcon ? <i className="peopleIcon" /> : ''}{perNameNumShowLine[0]}</span>
					</a>
				</Popover>);
			}
			const result = person.map((per) => {
				const perNameNum = per.split(',');
				if (!perNameNum[0] || !perNameNum[1]) {
					return <span style={{ lineHeight: '22px' }}>{per}</span>;
				}
				return (
					<Popover placement="bottom" overlay={overlay}>
						<p className="personPop">
							<a href={`https://work.alibaba-inc.com/u/${perNameNum[1]}`} target="_blank">
								<span onMouseOver={() => this.handleMouseOver(perNameNum[1])} className={`${this.props.className || ''}`}>{peopleIcon ? <i className="peopleIcon" /> : ''}{perNameNum[0]}</span>
							</a>
						</p>
					</Popover>
				);
			});
			// }
			
			return <span>{result}</span>;
		}
		if (person) {
			// 从person分离工号和人名
			if (person.indexOf('**') !== -1) {
				const _perNameNum = person.split('**');
				const _perNameNum2 = _perNameNum[1].split(',');
				return (
					<div className="_perNameNum2">
						<span>{_perNameNum[0]}</span>
						<Popover placement="bottom" overlay={overlay}>
							<a className="personPop" href={`https://work.alibaba-inc.com/u/${_perNameNum2[2]}`} target="_blank">
								<span onMouseOver={() => this.handleMouseOver(_perNameNum2[2])} className={`${this.props.className || ''}`}>{peopleIcon ? <i className="peopleIcon" /> : ''}{_perNameNum2[0]}</span>
							</a>
						</Popover>
					</div>
				);
			}
			const perNameNum = person.split(',');
			if (!perNameNum[0] || !perNameNum[1]) {
				return <span>{person}</span>;
			}
			return (<Popover placement="bottom" overlay={overlay}>
				<a className="personPop" href={`https://work.alibaba-inc.com/u/${perNameNum[1]}`} target="_blank">
					<span onMouseOver={() => this.handleMouseOver(perNameNum[1])} className={`${this.props.className || ''}`}>{peopleIcon ? <i className="peopleIcon" /> : ''}{perNameNum[0]}</span>
				</a>
			</Popover>);
		}
		return <span />;
	}
}
export default PeoplePop;
/**
 * 2 等待领用不显示
 * 3 加载中
 */
<file_sep>import ReplacePeople from './replacePeople';

export default ReplacePeople;
<file_sep>import Icon from 'uxcore-icon';
import Popover from 'uxcore-popover';
import RadioGroup from 'uxcore-radiogroup';
import classnames from 'classnames';
import './asset.less';

const RadioItem = RadioGroup.Item;
class Asset extends React.Component {
	constructor(props) {
		super(props);
	}
	
	render() {
		const { deviceInfo, showClose } = this.props;
		
		const overlay = (
			<div className="m4-info-content">
				超出岗位配置，需要部门M4审批
				<span onClick={this.props.showDialogInfo}>[配置标准]</span>
			</div>
		);
		return (
			<div className="device-container">
				<div className={classnames('device-header', { closeBtn: showClose })}>
					<RadioGroup
						className="check-asset"
						onChange={this.props.radioOrCheckChange.bind(null, deviceInfo)}
						value={this.props.selectAssetRadio}
					>
						<RadioItem value={deviceInfo.modelDetailId + deviceInfo.categoryType} text={deviceInfo.modelDetail} />
					</RadioGroup>
					{showClose ? 
						<div className="close-box">
							<Icon onClick={this.props.closeAsset.bind(null, deviceInfo)} name="guanbi" className="close-btn" />
						</div> : 
						deviceInfo.authority ? '' : 
							<Popover overlay={overlay} placement="bottomRight" overlayClassName="asset-m4-info">
								<div className="m4-info">
									<Icon name="jinggao-full" className="icon" />
								</div>
							</Popover>
					}
				</div>
				<div className="describe">{deviceInfo.configureMsg}</div>
				<div className="img-num">
					<div className="img-box">
						<span>
							<img data-action="zoom" data-original={'/workflow/common/getFile.json?path=' + deviceInfo.bigImgPath1} alt="" src={'/workflow/common/getFile.json?path=' + deviceInfo.smallImgPath1} />
						</span>
						{deviceInfo.smallImgPath2 ? (
							<span>
								<img data-action="zoom" data-original={'/workflow/common/getFile.json?path=' + deviceInfo.bigImgPath2} alt="" src={'/workflow/common/getFile.json?path=' + deviceInfo.smallImgPath2} />
							</span>
						) : ''}
					</div>
				</div>
			</div>
		);
	}
}

Asset.defaultProps = {
	radioOrCheck: 'radio', // 默认单选
	deviceInfo: {}, // 一个资产信息
	selectAssetRadio: '', // 单选 --- 选中的资产
	radioOrCheckChange: () => {}, // 选择函数
	// authority: true, // true不显示M4提示，false显示
	showDialogInfo: () => {},
	closeAsset: () => {},
};

export default Asset;
<file_sep>import * as ReactDOM from 'react-dom';
import ChangeViewTask from './changeViewTask';

ReactDOM.render(
	<ChangeViewTask />,
	document.getElementById('changeViewTask'),
);

<file_sep>import Icon from 'uxcore-icon';
import Popover from 'uxcore-popover';
import CheckboxGroup from 'uxcore-checkbox-group';
import classnames from 'classnames';
import CalNum from './calNum';
import BigImg from './bigImg';
import './asset.less';

const Item = CheckboxGroup.Item;
// 组件
class Asset extends React.Component {
	constructor(props) {
		super(props);
		this.state = {
			active: false,
			num: 0,
		};
		this.add = this.add.bind(this);
		this.decrease = this.decrease.bind(this);
	}
	// Tab切换导致组件重新渲染
	componentDidMount() {
		const activeAsset = (this.props.selectedAsset && this.props.selectedAsset.filter((list) => list.modelDetail === this.props.resDeviceInfo.modelDetail)) || [];
		if (activeAsset.length === 0) {
			this.setState({
				active: false,
				num: 0,
			});
		} else {
			this.setState({
				active: true,
				num: activeAsset[0].num,
			});	
		}
	}
	// 传递来新的props触发
	componentWillReceiveProps(nextProps) {
		/**
		 * 
		 * 这里说的不会造成第二次的渲染，并不是说这里的setState不会生效。在这个方法里调用setState会在组件更新完成之后在render方法执行之前更新状态，
		 * 将两次的渲染合并在一起。可以在componentWillReceiveProps执行setState，但是如果你想在这个方法里获取this.state得到的将会是上一次的状态。
		 */
		
		// 过滤出当前的
		const activeAsset = (nextProps.selectedAsset && nextProps.selectedAsset.filter((list) => list.modelDetail === nextProps.resDeviceInfo.modelDetail)) || [];
		if (activeAsset.length === 0) {
			this.setState({
				active: false,
				num: 0,
			});
		} else {
			this.setState({
				active: true,
				num: activeAsset[0].num,
			});	
		}
	}
	add(num) {
		if (this.state.active) {
			this.props.add(this.props.resDeviceInfo, num);
		}
	}
	decrease() {
		if (this.state.active) {
			this.props.decrease(this.props.resDeviceInfo);
		}
	}
	render() {
		const {
			resDeviceInfo,
			showClose,
			radioOrCheck,
			selectedAsset,
			selectLocationText,
			is11,
		} = this.props;
		const overlay = (
			<div className="m4-info-content">
				超出岗位配置，需要部门M4审批
				<span onClick={this.props.showDialogInfo}>[配置标准]</span>
			</div>
		);
		let stockNumber = null;
		if (resDeviceInfo.stockNumber >= 10 || is11) {
			stockNumber = <div style={{ paddingLeft: '38px', color: '#666', opacity: 0.8 }}>库存充足</div>;
		} else if (resDeviceInfo.stockNumber > 0) {
			stockNumber = <div style={{ paddingLeft: '38px', color: '#F37327' }}>库存紧张，剩余{resDeviceInfo.stockNumber}</div>;
		} else {
			stockNumber = <div style={{ paddingLeft: '38px', color: '#F37327' }}>所选区域无库存</div>;
		}
		return (
			<div className={classnames('device-container', { active: this.state.active })}>
				<div className={classnames('device-header', { closeBtn: showClose })}>
					{radioOrCheck === 'checkbox' ? (
						<CheckboxGroup
							className="check-asset"
							onChange={this.props.radioOrCheckChange.bind(null, resDeviceInfo)}
							value={selectedAsset[0] && selectedAsset[0].id.toString()}
							disabled={selectLocationText ? is11 ? false : resDeviceInfo.stockNumber <= 0 : false}
						>
							<Item value={resDeviceInfo.id + ''} text={resDeviceInfo.modelDetail} />
						</CheckboxGroup>
					) : (<CheckboxGroup
						className="check-asset"
					>
						<Item text={resDeviceInfo.modelDetail} />
					</CheckboxGroup>)}
					{showClose ? 
						<div className="close-box">
							<Icon onClick={this.props.closeAsset.bind(null, resDeviceInfo)} name="guanbi" className="close-btn" />
						</div> : 
						resDeviceInfo.authority ? '' : 
							<Popover overlay={overlay} placement="bottomRight" overlayClassName="asset-m4-info">
								<div className="m4-info">
									<Icon name="jinggao-full" className="icon" />
								</div>
							</Popover>
					}
				</div>
				<div className="describe">{resDeviceInfo.configureMsg}</div>
				{selectLocationText ? stockNumber : ''}
				<div className="img-num">
					<div className="img-box">
						<span>
							<BigImg original={'/workflow/common/getFile.json?path=' + resDeviceInfo.bigImgPath1} src={'/workflow/common/getFile.json?path=' + resDeviceInfo.smallImgPath1} />
						</span>
						{resDeviceInfo.smallImgPath2 ? (
							<span>
								<BigImg src={'/workflow/common/getFile.json?path=' + resDeviceInfo.smallImgPath2} original={'/workflow/common/getFile.json?path=' + resDeviceInfo.bigImgPath2} />
							</span>
						) : ''}
					</div>
					<CalNum num={this.state.num} add={this.add} decrease={this.decrease} className="select-num" />
				</div>
			</div>
		);
	}
}

Asset.defaultProps = {
	radioOrCheck: 'checkbox', // 默认单选
	resDeviceInfo: {}, // 一个资产信息
	selectAssetRadio: '', // 单选 --- 选中的资产
	radioOrCheckChange: () => {}, // 选择函数
	// authority: true, // true不显示M4提示，false显示
	showDialogInfo: () => {},
};

export default Asset;
<file_sep>import * as ReactDOM from 'react-dom';
import DeviceManage from './deviceManage';

ReactDOM.render(
	<DeviceManage />,
	document.getElementById('deviceManage'),
);

<file_sep>import Icon from 'uxcore-icon';
import CalNum from './calNum';
import './selectAsset.less';

class SelectAsset extends React.Component {
	constructor(props) {
		super(props);
		this.state = {
		};
	}
    
	render() {
		const props = this.props;
		const { deviceInfo, radioOrCheck, closeAsset } = props;
		return (
			<div className="selectAsset-box">
				<div className="img-box">
					<img alt="" data-action="zoom" data-original={'/workflow/common/getFile.json?path=' + deviceInfo.bigImgPath1} src={'/workflow/common/getFile.json?path=' + deviceInfo.smallImgPath1} />
				</div>
				<div className="right-describe">
					<span className="asset-name">{deviceInfo.modelDetail}</span>
					{radioOrCheck === 'radio' ? <p className="asset-num">1</p> : <CalNum className="selectAsset-num" />}
				</div>
				<div onClick={closeAsset.bind(null, deviceInfo)} className="close">
					<Icon name="guanbi" />
				</div>
			</div>
		);
	}
}

SelectAsset.defaultProps = {
	deviceInfo: {}, // 资产信息
	radioOrCheck: 'radio', // 默认单选
	closeAsset: () => {},
};

export default SelectAsset;
<file_sep>import * as React from 'react'
import * as ReactDOM from 'react-dom'
import UseAddress from './useAddress'
ReactDOM.render(
   <UseAddress/>,
 document.getElementById('UseAddress'))



 <file_sep>import Icon from 'uxcore-icon';
import Popover from 'uxcore-popover';
import RadioGroup from 'uxcore-radiogroup';
import classnames from 'classnames';
import CalNum from './calNum';
import './asset.less';

const RadioItem = RadioGroup.Item;

class Asset extends React.Component {
	constructor(props) {
		super(props);
		this.state = {
			active: false,
			num: 0,
		};
		this.add = this.add.bind(this);
		this.decrease = this.decrease.bind(this);
	}
	// Tab切换导致组件重新渲染
	componentDidMount() {
		const activeAsset = this.props.activeDevice && this.props.activeDevice.filter((list) => list.modelDetail === this.props.deviceInfo.modelDetail);
		// console.log(this.props.activeDevice, 'componentDidMount');
		if (activeAsset.length === 0) {
			this.setState({
				active: false,
				num: 0,
			});
		} else {
			this.setState({
				active: true,
				num: activeAsset[0].num,
			});	
		}
	}
	// 传递来新的props触发
	componentWillReceiveProps(nextProps) {
		// 过滤出当前的
		const activeAsset = (nextProps.activeDevice && nextProps.activeDevice.filter((list) => list.modelDetail === nextProps.deviceInfo.modelDetail)) || [];
		// console.log(nextProps.activeDevice, 'componentWillReceiveProps');
		if (activeAsset.length === 0) {
			this.setState({
				active: false,
				num: 0,
			});
		} else {
			this.setState({
				active: true,
				num: activeAsset[0].num,
			});	
		}
	}
	add() {
		if (this.state.active) {
			this.props.add(this.props.deviceInfo);
		}
	}
	decrease() {
		if (this.state.active) {
			this.props.decrease(this.props.deviceInfo);
		}
	}
	render() {
		const { 
			deviceInfo, 
			showClose, 
			radioOrCheck,
		} = this.props;
		
		const overlay = (
			<div className="m4-info-content">
				超出岗位配置，需要部门M4审批
				<span onClick={this.props.showDialogInfo}>[配置标准]</span>
			</div>
		);
		return (
			<div className={classnames('device-container', { active: this.state.active })}>
				<div className={classnames('device-header', { closeBtn: showClose })}>
					{radioOrCheck === 'radio' ? (
						<RadioGroup
							className="check-asset"
							onChange={this.props.radioOrCheckChange.bind(null, 'radio', deviceInfo)}
							value={this.props.selectAssetRadio}
						>
							<RadioItem value={deviceInfo.modelDetailId + deviceInfo.categoryType} text={deviceInfo.modelDetail} />
						</RadioGroup>
					) : <RadioGroup
						className="check-asset"
					>
						<RadioItem text={deviceInfo.modelDetail} />
					</RadioGroup>}
					{showClose ? 
						<div className="close-box">
							<Icon onClick={this.props.closeAsset.bind(null, deviceInfo)} name="guanbi" className="close-btn" />
						</div> : 
						deviceInfo.authority ? '' : 
							<Popover overlay={overlay} placement="bottomRight" overlayClassName="asset-m4-info">
								<div className="m4-info">
									<Icon name="jinggao-full" className="icon" />
								</div>
							</Popover>
					}
				</div>
				<div className="describe">{deviceInfo.configureMsg}</div>
				<div className="img-num">
					<div className="img-box">
						<span>
							<img data-action="zoom" data-original={'/workflow/common/getFile.json?path=' + deviceInfo.bigImgPath1} alt="" src={'/workflow/common/getFile.json?path=' + deviceInfo.smallImgPath1} />
						</span>
						{deviceInfo.smallImgPath2 ? (
							<span>
								<img data-action="zoom" data-original={'/workflow/common/getFile.json?path=' + deviceInfo.bigImgPath2} alt="" src={'/workflow/common/getFile.json?path=' + deviceInfo.smallImgPath2} />
							</span>
						) : ''}
					</div>
					<CalNum num={this.state.num} add={this.add} decrease={this.decrease} className="select-num" />
				</div>
			</div>
		);
	}
}

Asset.defaultProps = {
	radioOrCheck: 'radio', // 默认单选
	deviceInfo: {}, // 一个资产信息
	selectAssetRadio: '', // 单选 --- 选中的资产
	radioOrCheckChange: () => {}, // 选择函数
	// authority: true, // true不显示M4提示，false显示
	showDialogInfo: () => {},
};

export default Asset;
<file_sep>import Crumb from 'uxcore-crumb';
import moment from 'moment';
import Icon from 'uxcore-icon';
import Select from 'uxcore-select2';
import Button from 'uxcore-button';
import Dialog from 'uxcore-dialog';
import Popover from 'uxcore-popover';
import Form from 'uxcore-form';
import Message from 'uxcore-message';
import Table from 'uxcore-table';
import Uploader from 'components/uploader';
import './zooming';
import { http } from '../../lib/http';
import AssetDescribe from './assetDescribe';
import Asset from './asset';
import util from './util';
import { objToArray, locationObjToArray } from '../../lib/util';
import './changeSelectSubmit.less';

/**
 * 第三步选择更换设备
 */
const { parseURL } = util;
const Option = Select.Option;
const { TextAreaFormField } = Form;
const { TextAreaCount } = TextAreaFormField;
// 处理列表返回的数据
function handleTableData(data) {
	return data.map((list) => ({
		assetDescribe: {
			categoryName: list.categoryName, // 名称
			feature: list.feature, // 特征
			userName: list.userName, // 使用人
			categoryIdString: list.categoryIdString, // 获取资产图片的id
			id: list.id,
			user: list.user,
		},
		assetLabel: {
			ouResourceCode: list.ouResourceCode, // 大阿里编号
			resourceCode: list.resourceCode, // 资产编号
			sn: list.sn, // 序列号
		},
		useCondition: {
			startDate: list.startDate, // 启用日期
			usedMonths: list.usedMonths, // 已使用月
			useRemarkName: list.useRemarkName, // 使用说明
		},
		workFlowName: list.workFlowName,
		workFlowType: list.workFlowType,
		instanceId: list.instanceId,
	}));
}

// 资源标签
const AssetLabel = (props) => (
	<div className="assetLabel-wrapper">
		<p>大阿里编号：{props.data.ouResourceCode}</p>
		<p>资&nbsp;产&nbsp;编&nbsp;号：{props.data.resourceCode}</p>
		<p>序&nbsp;&nbsp;&nbsp; 列&nbsp;&nbsp; 号：{props.data.sn}</p>
	</div>
);
// 使用情况
const AssetUseCondation = (props) => (
	<div className="assetLabel-condation">
		<p>启用日期：{props.data.startDate ? moment(props.data.startDate).format('YYYY-MM-DD') : ''}</p>
		<p>已使用月：{props.data.usedMonths}</p>
		<p>使用说明：{props.data.useRemarkName}</p>
	</div>
);

class ChangeSelectBill extends React.Component {
	constructor(props) {
		super(props);
		this.state = {
			assetData: [], // 表格数据
			citys: [], // 获取的城市
			selectCityCode: '', // 选择的城市
			parks: [], // 获取的园区
			selectParkCode: '', // 选择的园区
			locations: [], // 获取的地点
			selectLocationText: '', // 选择的地点
			locationId: '', // 选择的地点ID
			storeHouseId: '', // 选择的库房ID
			noDevice: false,
			resEquipmentInfo: [], // 资产列表
			m4InfoDialog: false, // 资产领用政策
			selectAssetInfo: [], // 选中的资产
			fileList: [], // 附件
			jsonData: {}, // 提交数据
			attachments: [], // 附件
			chnageInfoShowDialog: false, // 更换详情弹窗
			submitDisabled: false,
			sureDisabled: false,
			validate: [], // 校验信息
			usedMonths: '',
		};
		this.handleCityChange = this.handleCityChange.bind(this);
		this.handleParkChange = this.handleParkChange.bind(this);
		this.handleLocationChange = this.handleLocationChange.bind(this);
		this.obtainLocationId = this.obtainLocationId.bind(this);
		this.radioOrCheckChange = this.radioOrCheckChange.bind(this);
		this.cancelAsset = this.cancelAsset.bind(this);
		this.submitSelect = this.submitSelect.bind(this);
		this.handleDialogOk = this.handleDialogOk.bind(this);
		this.uploaderFileChange = this.uploaderFileChange.bind(this);
	}
	componentDidMount() {
		http.get('/workflow/common/checkCanProcess.json').then((resp) => {
			if (!resp) { // 不能
				Dialog.error({
					content: '此设备不能更换',
					onOk() {
						window.location.href = '/workflow/change/select_asset.htm';
					},
					onCancel() {
						window.location.href = '/workflow/change/select_asset.htm';
					},
				});
			} else {
				const url = window.location.href;
				const paramsData = parseURL(url).params;
				// 获取要更换的资产详细信息
				http.get('/workflow/change/getDetail.json?resourceId=' + paramsData.resourceId).then((res) => {
					this.setState({
						assetData: handleTableData(res),
						usedMonths: res[0].usedMonths,
					});
				});
				// 获取城市
				http.get('/linkage/locationStoreMap/getCity.json').then((res) => {
					if (res.hasError) {
						Message.error(res.content, 3);
					} else {
						this.setState({
							citys: objToArray(res),
						});
					}
				});
				// 获取城市，园区，地点，提示元素
				this.cityPlaceholderEle = document.getElementsByClassName('select-city')[0].getElementsByClassName('kuma-select2-selection__placeholder')[0];
				this.parkPlaceholderEle = document.getElementsByClassName('select-park')[0].getElementsByClassName('kuma-select2-selection__placeholder')[0];
				this.locationPlaceholderEle = document.getElementsByClassName('select-location')[0].getElementsByClassName('kuma-select2-selection__placeholder')[0];
				// 获取资产信息
				http.get('/workflow/change/getChangeData.json?resourceId=' + paramsData.resourceId).then((resChangeData) => {
					const categoryTypeId = resChangeData.mapping.monitor ? 1 : 0;
					http.get('/newemployee/equipment/getEquipmentInfo.json', {
						params: {
							workFlowType: '更换',
							categoryTypeId,
							enumWorkFlowType: 'Change',
							workNo: paramsData.userId,
							usedMonths: this.state.usedMonths,
						},
					}).then((resEquipmentInfo) => {
						this.setState({
							resEquipmentInfo: objToArray(resEquipmentInfo),
						});
					});
				});
			}
		});
	}
	// 选择城市，获取园区
	handleCityChange(value) {
		this.cityPlaceholderEle.setAttribute('style', 'opacity: 0');
		this.parkPlaceholderEle.style.opacity = 1; // 恢复提示
		this.locationPlaceholderEle.style.opacity = 1;
		this.setState({
			selectCityCode: value,
			selectParkCode: '', // 清空园区
			selectLocationText: '', // 清空地点 ps 清空值，也要清空下拉数据
			locations: [], // 清空地点下拉数据
		});
		http.get('/linkage/locationStoreMap/getPark.json?cityCode=' + value).then((res) => {
			this.setState({
				parks: objToArray(res),
			});
		});
	}
	// 选择园区，获取地点
	handleParkChange(value) {
		this.parkPlaceholderEle.style.opacity = 0;
		this.locationPlaceholderEle.style.opacity = 1;
		const cityCode = this.state.selectCityCode;
		this.setState({
			selectParkCode: value,
			selectLocationText: '', // 清空地点
		});
		http.get('/linkage/locationStoreMap/getLocation.json?cityCode=' + cityCode + '&parkCode=' + value).then((res) => {
			this.setState({
				locations: locationObjToArray(res),
			});
		});
	}
	// 选择领用地点
	handleLocationChange(text) {
		this.locationPlaceholderEle.style.opacity = 0;
		this.obtainLocationId(text);
		this.setState({
			selectLocationText: text,
		});
	}
	// 选择完地点后，获取locationId和storeHouseId
	obtainLocationId(location) {
		const cityCode = this.state.selectCityCode;
		const parkCode = this.state.selectParkCode;
		http.get('/linkage/locationStoreMap/getLocation.json?cityCode=' + cityCode + '&parkCode=' + parkCode + '&location=' + location).then((res) => {
			this.setState({
				locationId: res.locationId,
				storeHouseId: res.storeHouseId,
			});
		});
	}
	// 资产领用政策
	assetUsePolicy() {
		return (
			<Dialog
				title={<span><Icon name="jinggao-full" className="icon" />资产领用规则</span>}
				visible={this.state.m4InfoDialog}
				className="m4-info-dialog"
				footer={
					<Button onClick={() => {
						this.setState({
							m4InfoDialog: false,
						});
					}} 
					type="primary"
					>知道啦</Button>}
				onCancel={() => {
					this.setState({
						m4InfoDialog: false,
					});
				}}
			>
				<ol>
					<li>B2B销售：M2以下不配置公司电脑，M2及以上标配普通笔记本；直销不配置电脑。</li>
					<li>外包、实习生、客满座席（P4以下）标配普通台式机。</li>
					<li>Jobcode（内网岗位名称）是技术、UED：新入职员工或名下电脑使用满42个月的老员工可申请MacBook Pro。</li>
					<li>Jobcode（内网岗位名称）是技术、UED、BI：可配置大屏显示器（22寸及以上）。</li>
					<li>除以上其他岗位标配普通笔记本；应蚂蚁金服安全部要求，蚂蚁、口碑非技术、UED同学不配置MAC电脑。</li>
					<li>电脑、耳麦等领用遵循一人一机原则。</li>
				</ol>
			</Dialog>
		);
	}
	// 资产选择
	radioOrCheckChange(deviceInfo, value) {
		const selectAssetInfoArr = [];
		selectAssetInfoArr.push(deviceInfo);
		this.setState({
			selectAssetRadio: value,
			selectAssetInfo: selectAssetInfoArr,
		});
	}
	// 取消选择
	cancelAsset() {
		this.setState({
			selectAssetRadio: '',
			selectAssetInfo: [],
		});
	}
	// 上传附件
	uploaderFileChange(fileList) {
		const arr = fileList.map((list) => ({
			...list,
			response: {
				...list.response,
				data: {
					downloadUrl: list.response.path,
				},
			},
		}));
		this.setState({
			fileList: arr,
		});
	}
	// 提交申请
	submitSelect() {
		const url = window.location.href;
		const params = parseURL(url).params;
		// 判断有没有选领用地点
		if (!this.state.selectLocationText) {
			Message.error('请选择领用地点！', 3);
			return;
		}
		const locationId = this.state.storeHouseId.split(',')[0];
		const storeLocationMappingId = this.state.locationId;
		// 判断有没有选择设备
		const selectAssetRadio = this.state.selectAssetRadio;
		if (!selectAssetRadio) {
			Message.error('请选择领用的设备！', 3);
			return;
		}
		// 有没有填写申请原因
		const reasonForm = this.formReason.getValues();
		const reason = reasonForm.values.reason;
		if (!reason) {
			Message.error('请填写申请原因！', 3);
			return;
		}
		if (!reasonForm.pass) {
			Message.error('申请原因不能超过字数限制！', 3);
			return;
		}
		this.setState({
			sureDisabled: true,
		});
		const selectAssetInfo = this.state.selectAssetInfo[0];
		// 附件
		const attachments = this.state.fileList.filter((file) => file.type !== 'delete').map((file) => ({
			...file.response,
			$model: {
				...file.response,
			},
			$events: {},
			$skipArray: true,
			$accessors: {},
			$1520219871783: [],
		}));
		const jsonData = {
			principleWorkId: params.userId,
			locationId,
			reason,
			manageType: 'it',
			formType: 'Change',
			returnType: params.returnType,
			storeLocationMappingId,
			items: [
				{
					categoryAndFetureId: selectAssetInfo.ampCategoryId,
					requestAmount: 1,
					equipmentConfigureId: selectAssetInfo.id,
				},
				{
					resourceId: params.resourceId,
					requestAmount: 1,
					returnType: params.returnType,
				},
			],
		};
		http.get('/workflow/change/validate.json', {
			params: {
				jsonData,
				attachments: JSON.stringify(attachments), // 数组参数前自带[]
			},
		}).then((res) => {
			this.setState({
				chnageInfoShowDialog: true,
				jsonData,
				attachments,
				sureDisabled: false,
				validate: res,
			});
		});
	}
	// 提交
	handleDialogOk() {
		this.setState({
			submitDisabled: true,
		});
		const jsonData = this.state.jsonData;
		const attachments = this.state.attachments;
		http.get('/workflow/change/submitChange.json', {
			params: {
				jsonData,
				attachments: JSON.stringify(attachments),
			},
		}).then((res) => {
			this.setState({
				submitDisabled: false,
			});
			if (res.hasError) {
				Message.error(res.content, 3);
			} else {
				window.location.href = '/workflow/task/mysubmit.htm';
			}
		});
	}
	render() {
		const overlay = (
			<div className="tip">
				<Icon name="jinggao-full" className="icon" />
				<div className="important-tip">更换政策：</div>
				<p>1、内网岗位名称是技术、UED、BI、风控的岗位：可配置台式机+单屏大屏、台式机+双屏（大屏+中屏）、笔记本+单屏大屏；客服-热线&在线和
					客服-交易保障：可配置中屏双屏。其余岗位不配置双屏显示器（笔记本算一块显示屏）； 大屏：22寸及以上；中屏：大于17寸小于22寸；小屏：
					17寸及以下。
				</p>
				<p>2. 其他因显示器故障问题置换需选择损坏更换：提交流程前请先打1818-3检测处理；</p>
				<p>3. 显示器暂不支持自购。</p>
			</div>
		);
		const columns = [
			{
				dataKey: 'assetDescribe',
				title: '资源描述',
				width: 299,
				render: (data) => (<AssetDescribe data={data} />),
			},
			{
				dataKey: 'assetLabel',
				title: '资源标签',
				width: 265,
				message: <span>大阿里编号：号码为<font style={{ color: 'red' }}>TD</font>开头的标签。<br />资产标签：号码为<font style={{ color: 'red' }}>T50</font>或<font style={{ color: 'red' }}>B50</font>等等开头的标签。<br />电脑上贴的标签号码只要与前面2个中的其中1个对的上就可以了。</span>,
				render: (data) => (<AssetLabel data={data} />),
			},
			{
				dataKey: 'useCondition',
				title: '使用情况',
				width: 185,
				render: (data) => (<AssetUseCondation data={data} />),
			},
		];
		const renderTable = {
			jsxdata: { data: this.state.assetData },
			jsxcolumns: columns,
			doubleClickToEdit: false,
			// height: 575,
		};
		const url = window.location.href;
		const params = parseURL(url).params;
		return (
			<div className="changeSelectBill">
				{this.assetUsePolicy()}
				<div className="bill-crumb">
					<Crumb className="crumb-style crumb-root">
						<Crumb.Item target="_blank" href="/workflow/change/select_asset.htm" className="crumb-item-style">资产更换</Crumb.Item>
						<Crumb.Item>申请单</Crumb.Item>
					</Crumb>
				</div>
				<div className="bill-title">
					<span>资产更换申请单</span>
				</div>
				<div className="change-policy">
					<Icon name="jinggao-full" className="icon" />
					<span className="policy">更换政策</span>
					<Popover overlay={overlay} placement="top" trigger="click">
						<span className="info-tip">[查看详情]</span>
					</Popover>
				</div>
				<div className="daiChange-tip">
					<span>待更换设备</span>
					<a href="/workflow/change/select_asset.htm">重新选择</a>
				</div>
				<div className="daiChange-table">
					<Table ref={(c) => { this.table = c; }} {...renderTable} />
				</div>
				<div className="step-1">
					<div className="step-title">第一步：选择新设备的领用地点</div>
					<span>领用地点</span>
					<Select onChange={this.handleCityChange} className="select-city" placeholder="城市">
						{this.state.citys.map((city) => (<Option value={city.value}>{city.text}</Option>))}
					</Select>
					<Select value={this.state.selectParkCode} onChange={this.handleParkChange} className="select-park" placeholder="园区">
						{this.state.parks.map((park) => (<Option value={park.value}>{park.text}</Option>))}
					</Select>
					<Select value={this.state.selectLocationText} onChange={this.handleLocationChange} className="select-location" placeholder="领用位置">
						{this.state.locations.map((location) => (<Option value={location.value}>{location.text}</Option>))}
					</Select>
				</div>
				<div className="step-2">
					<div className="step-title">第二步：选择需领用的设备</div>
					<div className="tab-box">
						{this.state.resEquipmentInfo.map((list) => (
							<div className="deviceList-box">					
								<div className="deviceList-title">{list.value}</div>
								<div className="deviceList-list">
									{list.text.map((assetInfo) => (
										<Asset
											radioOrCheckChange={this.radioOrCheckChange}
											selectAssetRadio={this.state.selectAssetRadio}
											deviceInfo={assetInfo}
											showDialogInfo={() => { this.setState({ m4InfoDialog: true }); }}
										/>
									))}
								</div>
							</div>
						))}
					</div>
				</div>
				{/* 已选设备 */}
				{this.state.selectAssetInfo.map((list) => (
					<div className="select-info-box">
						<div className="select-info-title">已选设备：</div>
						<div className="select-info-list">
							<Asset radioOrCheck="none" showClose closeAsset={this.cancelAsset} deviceInfo={list} />
						</div>
					</div>
				))}
				{/* 第三步填写申请原因 */}
				<div className="reason-box">
					<div className="step-title">第三步：填写申请原因</div>
					<Form
						ref={(c) => { this.formReason = c; }}
					>
						<TextAreaFormField 
							jsxname="reason" 
							jsxplaceholder="请详细描述需求原因，减少审批人员的二次沟通；描述不清楚的需求，资产审批人员可能会直接驳回哦！" 
						>
							<TextAreaCount total={256} />
						</TextAreaFormField>
					</Form>
				</div>
				{/* 添加附件 */}
				<div className="add-file">
					<Uploader 
						isOnlyImg={false}
						multiple
						name="assetUploadFile"
						fileList={this.state.fileList}
						url="/workflow/common/uploadFile.do"
						onChange={this.uploaderFileChange}
					/>
				</div>
				{/* 确认按钮 */}
				<div className="btn-box">
					<Button disabled={this.state.sureDisabled} onClick={this.submitSelect}>提交申请</Button>		
				</div>
				{/* 对话框详情 */}
				<Dialog
					className="asset-detail-dialog"
					visible={this.state.chnageInfoShowDialog}
					title="资产更换"
					footer={[
						<Button className="cancel-btn" onClick={() => { this.setState({ chnageInfoShowDialog: false }); }} size="small">取消</Button>,
						<Button disabled={this.state.submitDisabled} onClick={this.handleDialogOk} size="small">确定</Button>,
					]}
					onCancel={() => {
						this.setState({
							chnageInfoShowDialog: false,
						});
					}}
				>
					<div className="changeInfo">
						<table>
							<thead>
								<tr>
									<td>资产更换名称</td>
									<td>资产描述</td>
									<td>归还方式</td>
								</tr>
							</thead>
							<tbody>
								<tr>
									<td>{this.state.assetData[0] && this.state.assetData[0].assetDescribe.categoryName}</td>
									<td>{this.state.assetData[0] && this.state.assetData[0].assetDescribe.feature}</td>
									<td>{decodeURIComponent(params.returnTypeName)}</td>
								</tr>
							</tbody>
						</table>
					</div>
					<div className="changeInfo-now">
						<table>
							<thead>
								<tr>
									<td>领用资产名称</td>
									<td>资产描述</td>
								</tr>
							</thead>
							<tbody>
								<tr>
									<td>{this.state.selectAssetInfo[0] && this.state.selectAssetInfo[0].modelDetail}</td>
									<td>{this.state.selectAssetInfo[0] && this.state.selectAssetInfo[0].configureMsg}</td>
								</tr>
							</tbody>
						</table>
					</div>
					{this.state.validate.length ? (<div className="validate-tip">
						<Icon name="jinggao-full" className="icon" />
						<div className="tip-title">您的申请超出了集团IT资产配置标准，需要审批！</div>
						<span>超标原因：</span>
						{this.state.validate.map((tip, index) => (
							<p>{index + 1}、{tip}</p>
						))}
					</div>) : ''}
				</Dialog>
			</div>
		);
	}
}
export default ChangeSelectBill;
<file_sep>/**
 *  设备信息配置
 *  author 刘玄清
 *  2018-2-11
 */

import Form from 'uxcore-form';
import Button from 'uxcore-button';
import Icon from 'uxcore-icon';
import Table from 'uxcore-table';
import Dialog from 'uxcore-dialog';
import Message from 'uxcore-message'; // 全局提醒
import Uploader from 'components/uploader';
import { http } from '../../lib/http';
import './deviceManage.less';

const {
	InputFormField,
	TextAreaFormField,
	SelectFormField,
	NumberInputFormField,
} = Form;
const { TextAreaCount } = TextAreaFormField;
class DeviceManage extends React.Component {
	constructor(props) {
		super(props);
		this.state = {
			showDialog: false,
			dialogTitle: '',
			modelNormal: [], // 型号大类list
			modelDetail: [], // 型号小类list
			categoryType: [], // 所属类别list
			workFlowType: [], // 所属流程list
			fileList: [],
			jsxvalues: {},
			edit: false,
			id: '', // 编辑的数据id
			keyword: '',
			editModelDetailId: '', // 编辑时保存型号小类Id
			editAmpCategoryId: '', // 编辑时保存amp资产类目Id
		};
		this.hasSelect = false; // 是否是有效的搜索
	}

	componentDidMount() {}

	// 关键字查询
	handleSelect() {
		this.hasSelect = true;
		const keyword = this.formSelet.getValues().values.keyword;
		this.setState({
			keyword,
		});
	}

	// 获取型号大类
	obtainModelNormal() {
		http.get('/newemployee/equipment/getModelNormal.json').then((res) => {
			this.setState({
				modelNormal: res.map((list) => ({
					value: list,
					text: list,
				})),
			});
		});
	}

	// 获取型号小类与amp资产类目
	obtainModelDetail() {
		http.get('/newemployee/equipment/GetModelDetail.json').then((res) => {
			this.setState({
				modelDetail: res.map((list) => ({
					value: list.modelDetail + '&' + list.modelDetailId + '*' + list.ampCategory + '&' + list.ampCategoryId,
					text: list.modelDetail,
				})),
			});
		});
	}

	// 获取所属类别
	obtainCategoryType() {
		http.get('/newemployee/equipment/getCategoryType.json?add=true').then((res) => {
			this.setState({
				categoryType: res.map((list) => ({
					value: list.name + '&' + list.id,
					text: list.name,
				})),
			});
		});
	}

	// 获取所属流程
	obtainWorkFlowType() {
		http.get('/newemployee/equipment/getWorkFlowType.json').then((res) => {
			this.setState({
				workFlowType: res.map((list) => ({
					value: list,
					text: list,
				})),
			});
		});
	}

	// 新增
	handleAdd() {
		// 清空表单
		this.setState({
			fileList: [],
			jsxvalues: {
				ampCategory: '',
			},
			edit: false,
		});
		this.form && this.form.resetValues();
		// 获取型号大类
		this.obtainModelNormal();
		// 获取型号小类与amp资产类目
		this.obtainModelDetail();
		// 获取所属类别
		this.obtainCategoryType();
		// 获取所属流程
		this.obtainWorkFlowType();
		this.setState({
			showDialog: true,
			dialogTitle: '设备新增',
		}, () => {
			const inputBtn = document.getElementsByClassName('kuma-upload-picker-visual')[0];
			const imgTip = document.getElementsByClassName('imgTip')[0];
			inputBtn.style.display = 'inline-block';
			imgTip.style.display = 'inline-block';
		});
	}

	// form表单值变化 
	handleFormChange(values) {
		const result = values.modelDetail;
		const edit = this.state.edit;
		if (result && !edit) {
			const ampCategoryValue = result.split('*')[1];
			const ampCategory = ampCategoryValue.split('&')[0];
			this.setState({
				jsxvalues: {
					ampCategory,
				},
			});
		}
	}
	// 图片上传  点击删除这个样执行一次
	handleImgChange(fileList) {
		const inputBtn = document.getElementsByClassName('kuma-upload-picker-visual')[0];
		const imgTip = document.getElementsByClassName('imgTip')[0];
		if (fileList.filter((list) => list.type !== 'delete').length >= 2) { // 最多上传两张	
			inputBtn.style.display = 'none';
			imgTip.style.display = 'none';
		} else {
			inputBtn.style.display = 'inline-block';
			imgTip.style.display = 'inline-block';
		}
		const fileListResult = fileList.map((data) => {
			if (data.__uploaderId) { // 已经上传过的有__uploaderId
				return data;
			} 
			return {
				...data,
				response: {
					data: {
						downloadUrl: '/workflow/common/getFile.json?path=' + data.response.newPath, // 放大图
						previewUrl: '/workflow/common/getFile.json?path=' + data.response.newSmallPath, // 回显图
					},
				},
				newSmallPath: data.response.newSmallPath,
				newPath: data.response.newPath,
			};
		});
		this.setState({
			fileList: fileListResult,
		});
	}
	// 图片过滤掉
	imgUploaderError() {
		Message.error('图片大小不能超过1M', 3);
	}
	// 删除图片
	handleImgDelete(file) {
		http.get('/newemployee/equipment/deleteImg.json?newPath=' + file.newPath + '&newSmallPath=' + file.newSmallPath).then((res) => {
			if (!res.hasError) {
				Message.success(res.content, 2);
			} else {
				Message.error(res.content, 2);
			}
		});
	}

	// 编辑
	async tableEdit(rowData) {
		await this.form && this.form.resetValues();
		await this.setState({
			showDialog: true,
			dialogTitle: '设备编辑',
			edit: true,
			id: rowData.id,
			fileList: [],
		});
		// 获取型号大类
		this.obtainModelNormal();
		// 获取所属类别
		this.obtainCategoryType();
		// 获取所属流程
		this.obtainWorkFlowType();
		// 型号小类不可编辑
		http.get('/newemployee/equipment/getOne.json?id=' + rowData.id).then((res) => {
			const fileList = [{
				newPath: res.bigImgPath1,
				newSmallPath: res.smallImgPath1,
				response: {
					previewUrl: '/workflow/common/getFile.json?path=' + res.smallImgPath1, // 显示的缩略图
					name: '',
					downloadUrl: '/workflow/common/getFile.json?path=' + res.bigImgPath1, // 点击放大的图片
				},
			}];
			if (res.smallImgPath2) {
				fileList.push({
					newPath: res.bigImgPath2,
					newSmallPath: res.smallImgPath2,
					response: {
						previewUrl: '/workflow/common/getFile.json?path=' + res.smallImgPath2,
						name: '',
						downloadUrl: '/workflow/common/getFile.json?path=' + res.bigImgPath2,
					},
				});
			}
			const inputBtn = document.getElementsByClassName('kuma-upload-picker-visual')[0];
			const imgTip = document.getElementsByClassName('imgTip')[0];
			// 如果两张图片，隐藏上传按钮
			if (fileList.length >= 2) {
				inputBtn.style.display = 'none';
				imgTip.style.display = 'none';
			} else {
				inputBtn.style.display = 'inline-block';
				imgTip.style.display = 'inline-block';
			}
			this.setState({
				jsxvalues: {
					modelNormal: res.modelNormal,
					modelDetail: res.modelDetail,
					ampCategory: res.ampCategory,
					categoryType: res.categoryType + '&' + res.categoryTypeId,
					workFlowType: res.workFlowType,
					sortOrder: res.sortOrder,
					configureMsg: res.configureMsg,
				},
				fileList,
				editModelDetailId: res.modelDetailId,
				editAmpCategoryId: res.ampCategoryId,
			});
		});
	}
	// 删除
	tableDelete(rowData) {
		const me = this;
		Dialog.confirm({
			title: '确定删除吗？',
			content: '目标删除后将不可恢复，如有子目标将会被同时删除！',
			onOk() {
				http.get('/newemployee/equipment/deleteEquipmentConfigure.json?id=' + rowData.id).then((res) => {
					if (res.hasError) {
						Message.error(res.content, 3);
					} else {
						Message.success(res.content, 2);
						me.table.fetchData();
					}
				});
			},
			onCancel() {},
		});
	}
	// 对话框确认
	deviceConfirm() {
		const inputValue = this.form.getValues().values;
		const modelNormal = inputValue.modelNormal; // 型号大类
		const modelDetail = inputValue.modelDetail; // 型号小类
		const categoryType = inputValue.categoryType; // 所属类别
		const workFlowType = inputValue.workFlowType; // 所属流程
		const sortOrder = inputValue.sortOrder; // 排序
		const configureMsg = inputValue.configureMsg; // 配置信息
		const imgInputList = this.state.fileList.filter((list) => list.type !== 'delete'); // 上传的图片
		if (!modelNormal) {
			Message.info('型号大类必填！');
			return;
		}
		if (!modelDetail) {
			Message.info('型号小类必填！');
			return;
		}
		if (!categoryType) {
			Message.info('所属类别必填！');
			return;
		}
		if (!workFlowType) {
			Message.info('所属流程必填！');
			return;
		}
		if (!sortOrder) {
			Message.info('排序必填！');
			return;
		}
		if (!configureMsg) {
			Message.info('配置信息必填！');
			return;
		}
		if (configureMsg && configureMsg.length > 50) {
			Message.info('配置信息仅限50个字符！');
			return;
		}
		if (!imgInputList.length) {
			Message.info('请上传图片！');
			return;
		}
		const edit = this.state.edit;
		if (edit) {
			const ampCategoryId = this.state.editAmpCategoryId;
			const modelDetailId = this.state.editModelDetailId;
			const jsonData = {
				id: this.state.id,
				modelNormal,
				categoryType: categoryType.split('&')[0],
				categoryTypeId: categoryType.split('&')[1],
				modelDetailId,
				ampCategoryId,
				workFlowType,
				sortOrder,
				configureMsg,
				bigImgPath1: imgInputList[0].newPath,
				smallImgPath1: imgInputList[0].newSmallPath,
				bigImgPath2: imgInputList[1] ? imgInputList[1].newPath : '',
				smallImgPath2: imgInputList[1] ? imgInputList[1].newSmallPath : '',
			};
			http.get('/newemployee/equipment/addOrUpdateEquipmentConfigure.json?jsonData=' + JSON.stringify(jsonData)).then((res) => {
				if (res.hasError) {
					Message.error(res.content, 3);
				} else {
					Message.success(res.content, 2);
					this.setState({
						showDialog: false,
					});
					this.table.fetchData();
				}
			});
		} else {
			const jsonData = {
				modelNormal,
				modelDetail: modelDetail.split('*')[0].split('&')[0], // 型号小类名称
				modelDetailId: modelDetail.split('*')[0].split('&')[1], // 型号小类Id
				ampCategory: modelDetail.split('*')[1].split('&')[0], // amp资产类目
				ampCategoryId: modelDetail.split('*')[1].split('&')[1], // amp资产类目Id
				categoryType: categoryType.split('&')[0], // 所属类别
				categoryTypeId: categoryType.split('&')[1], // 所属类别Id
				workFlowType,
				sortOrder,
				configureMsg,
				bigImgPath1: imgInputList[0].newPath,
				smallImgPath1: imgInputList[0].newSmallPath,
				bigImgPath2: imgInputList[1] ? imgInputList[1].newPath : '',
				smallImgPath2: imgInputList[1] ? imgInputList[1].newSmallPath : '',
			};
			http.get('/newemployee/equipment/addOrUpdateEquipmentConfigure.json?jsonData=' + JSON.stringify(jsonData)).then((res) => {
				if (res.hasError) {
					Message.error(res.content, 3);
				} else {
					Message.success(res.content, 2);
					this.setState({
						showDialog: false,
					});
					this.table.fetchData();
				}
			});
		}
	}
	// 编辑或新增
	deviceManage() {
		return (
			<Dialog
				title={this.state.dialogTitle}
				className="device-dialog"
				visible={this.state.showDialog}
				onCancel={() => {
					this.setState({
						showDialog: false,
						jsxvalues: null,
					});
				}}
				onOk={this.deviceConfirm.bind(this)}
			>
				<Form
					ref={(c) => { this.form = c; }}
					jsxvalues={this.state.jsxvalues}
					jsxonChange={(values) => { this.handleFormChange(values); }}
				>
					<SelectFormField
						jsxlabel="型号大类" 
						jsxname="modelNormal"
						jsxdata={this.state.modelNormal} 
					/>
					{!this.state.edit ? <SelectFormField 
						jsxlabel="型号小类"
						jsxname="modelDetail"
						jsxdata={this.state.modelDetail} 
					/> : ''}
					{this.state.edit ? <InputFormField
						jsxlabel="型号小类"
						jsxname="modelDetail"
						jsxdisabled
					/> : ''}
					<InputFormField
						jsxlabel="资产类目"
						jsxname="ampCategory"
						jsxdisabled
					/>
					<SelectFormField
						jsxlabel="所属类别"
						jsxname="categoryType"
						jsxdata={this.state.categoryType} 
					/>
					<SelectFormField
						jsxlabel="所属流程"
						jsxname="workFlowType"
						jsxdata={this.state.workFlowType} 
					/>
					<NumberInputFormField jsxname="sortOrder" jsxlabel="排序" />
					<TextAreaFormField jsxname="configureMsg" 
						jsxlabel="配置信息"
						jsxplaceholder="仅限50个字符"
						jsxrules={[
							{ validator(value) { return value ? value.length <= 50 : true; }, errMsg: '仅限50个字符' },
						]}
					>
						<TextAreaCount total={50} />
					</TextAreaFormField>
				</Form>
				<div className="imgUploader">
					<div className="imgLabel">图片</div>
					<Uploader
						isOnlyImg
						isVisual
						sizeLimit="1mb"
						fileList={this.state.fileList}
						accept="jpg,jpeg,png,gif,webp,bmp"
						name="assetUploadFile"
						url="/newemployee/equipment/upLoadImg.json"
						onCancel={this.handleImgDelete.bind(this)}
						onChange={this.handleImgChange.bind(this)}
						onqueuefilefiltered={this.imgUploaderError}
					/>
					<div className="imgTip">建议尺寸500 x 500px<p>图片大小不超过1M</p></div>
				</div>
			</Dialog>
		);
	}
	// table 请求之前
	tableBeforeFetch(data) {
		if (this.hasSelect) { // 查询返回第一页的数据
			data.currentPage = 1;
		}
		return data;
	}

	// 表格返回数据处理
	tableBackData(tableData) {
		this.hasSelect = false; // 数据返回后恢复为没有查询状态
		return tableData;
	}

	render() {
		const me = this;
		const columns = [
			{
				dataKey: 'modelNormal',
				title: '型号大类',
				width: 165,
			},
			{
				dataKey: 'modelDetail',
				title: '型号小类',
				width: 165,
			},
			{
				dataKey: 'ampCategory',
				title: '资产类目',
				width: 165,
			},
			{
				dataKey: 'categoryType',
				title: '所属类别',
				width: 100,
			},
			{
				dataKey: 'workFlowType',
				title: '所属流程',
				width: 100,
			},
			{
				dataKey: 'sortOrder',
				title: '排序',
				width: 100,
			},
			{
				dataKey: 'configureMsg',
				title: '配置信息',
				width: 195,
			},
			{
				dataKey: 'action',
				title: '操作',
				width: 150,
				type: 'action',
				actions: [
					{
						title: '编辑',
						callback: me.tableEdit.bind(this),
					},
					{
						title: '删除',
						callback: me.tableDelete.bind(this),
					},
				],
			},
		];
		const renderTable = {
			doubleClickToEdit: false,
			className: 'table-container',
			fetchUrl: '/newemployee/equipment/listAll.json',
			jsxcolumns: columns,
			beforeFetch: me.tableBeforeFetch.bind(me),
			fetchParams: {
				keyword: me.state.keyword,
			},
			processData: me.tableBackData.bind(this),
		};
		return (
			<div className="page-deviceManage">
				<div className="page-inner">

					<div className="title">
						<span>领用/借用设备维护</span>
					</div>

					<div className="select-area">
						<Form
							ref={(c) => { this.formSelet = c; }}
							className="select-from"
						>
							<InputFormField jsxname="keyword" jsxlabel="关键字查询：" jsxplaceholder="" />
						</Form>
						<Button className="select-btn" onClick={me.handleSelect.bind(me)}><Icon name="sousuo" /></Button>
						<div className="space" />
						<Button type="outline" className="addBtn" onClick={me.handleAdd.bind(me)}>新增</Button>
					</div>

					<div className="table-box">
						<Table ref={(c) => { this.table = c; }} {...renderTable} />
					</div>

					{this.deviceManage()}

				</div>
			</div>
		);
	}
}
// 下拉列表显示黑色 和value对应
// 编辑和新增是否用一个
export default DeviceManage;
<file_sep>import * as React from 'react';
import * as ReactDOM from 'react-dom';
import Borrow from './borrow';

ReactDOM.render(
	<Borrow />,
	document.getElementById('borrow'),
);
<file_sep>import { http } from '../../lib/http';

class AssetDescribe extends React.Component {
	constructor(props) {
		super(props);
		this.state = {
			imgPath: '',
		};
	}
	componentDidMount() {
		http.get('/linkage/assetCategory/selectReource.json?id=' + this.props.data.categoryIdString).then((res) => {
			this.setState({
				imgPath: res.picList[0] && res.picList[0].path,
			});
		});
	}
	render() {
		const { data } = this.props;
		const { imgPath } = this.state;
		return (
			<div className="assetDescribe-wrapper">
				<div className="img-content"><img alt="暂无图片" src={'/workflow/common/getFile.json?path=' + imgPath} /></div>
				<div className="asset-infomation">
					<p>名&nbsp;&nbsp;&nbsp;&nbsp;称：<span className="asset-name"><a target="_blank" href={'/workflow/myassets/detail.htm?resource_id=' + data.id}>{data.categoryName}</a></span></p>
					<p>特&nbsp;&nbsp;&nbsp;&nbsp;征：<span>{data.feature}</span></p>
					<p>使用人：<span className="asset-user"><a target="_blank" href={'https://work.alibaba-inc.com/u/' + data.user}>{data.userName}</a></span></p>
				</div>
			</div>
		);
	}
}

export default AssetDescribe;
<file_sep>/**
 * 领用地点维护
 * author 刘玄清
 * 2018-2-1
 * 0.1.9
 * 
 * 
 */
import Form from 'uxcore-form';
import Button from 'uxcore-button';
import Icon from 'uxcore-icon';
import Table from 'uxcore-table';
import Dialog from 'uxcore-dialog';
import Select from 'uxcore-select2';
import Message from 'uxcore-message';
import { http } from '../../lib/http';
import './useAddress.less';

const { InputFormField } = Form;
const { Option } = Select;
class UseAddress extends React.Component {
	constructor(props) {
		super(props);
		this.state = {
			addressDialog: false, // 新增领用地弹窗
			editAddressDialog: false, // 领用地编辑弹窗
			cityCollection: {}, // 搜索获取城市集合
			parkCollection: {}, // 搜搜获取园区集合
			cityValue: '', // 选择的城市
			cityValueCode: '',
			parkValue: '', // 选择的园区
			parkValueCode: '', //
			selectKeyWord: '', // 查询关键字
			newCityValue: '', //  新增城市选中
			newParkValue: '', // 新增添加园区
			newLocationValue: '', // 新增添加地点
			newParkCollection: {}, // 新增园区options
			newLocationCollection: {}, // 新增库房options
			newRegionValue: '', // 新增选择的区域
			newRegionCollection: [], // 新增所属区域
			newHouseCollection: [], // 新增关联库房
			newHouseValue: [], //
			editData: {}, // 编辑数据
			editId: '',
			editSuper: false, // 是否有编辑权限
		};
		this.cityMap = new Map(); // cityName codeValue
		this.parkMap = new Map(); // parkName codeValue
		this.locationMap = new Map(); // location
		this.newParkCloseEl = null; //
		this.newLocationCloseEl = null;//
		this.newCityCloseEl = null; //
		this.newHouseMap = new Map(); //
		this.hasSelect = false; // 是否是有效的搜索
		this.selectCity; // 保存选择的城市
		this.selectPark; // 保存选择的园区
		this.selectKeyword; // 保存输入的关键字
		this.oldLocationValue;// 保存旧的
	}
	componentDidMount() {
		const me = this;
		http('/linkage/locationStoreMap/getCity.json').then((res) => {
			if (!res.hasError) {
				me.setState({
					cityCollection: res,
				});
				for (let i = 0; i < Object.keys(res).length; i++) {
					this.cityMap.set(res[Object.keys(res)[i]], Object.keys(res)[i]);
				}
			}
		});
		// 隐藏搜搜园区的icon
		this.selectParkEl = document.getElementsByClassName('select2-park')[0].getElementsByClassName('kuma-select2-selection__clear')[0];
		this.selectParkEl.style.display = 'none'; // 因为有value，初始化的时候隐藏close按钮
	}
	// 查询，下拉城市选择
	handleCityChange(value) {
		const me = this;
		me.selectParkEl.style.display = 'none';
		if (value) { // 有值时
			me.setState({
				cityValue: value,
			});
			http('/linkage/locationStoreMap/getPark.json?cityCode=' + me.cityMap.get(value)).then((res) => {
				if (!res.hasError) {
					me.setState({
						parkCollection: res,
						parkValue: '', // 清空园区
					});
					for (let i = 0; i < Object.keys(res).length; i++) {
						me.parkMap.set(res[Object.keys(res)[i]], Object.keys(res)[i]);
					}
				}
			});
		} else {
			me.setState({
				parkValue: '',
				parkCollection: {},
				cityValue: '',
			});
		}
	}
	// 查询，下拉园区选择
	handleParkChange(value) {
		if (value) {
			this.selectParkEl.style.display = 'inline-block';
			this.setState({
				parkValue: value,
			});
		} else {
			this.selectParkEl.style.display = 'none';
			this.setState({
				parkValue: '',
			});
		}
	}
	// 查询
	handleSelect() {
		const formData = this.form_select_keywords.getValues().values;
		const city = this.cityMap.get(this.state.cityValue);
		const park = this.parkMap.get(this.state.parkValue);
		// 判断是否是有效的搜索 1 都为空无效， 两次三个值都不变
		// 如果是有效的搜索，页数置位1
		// 这里最好别用state，state改变会导致页面渲染一次
		// 有效的搜索table会刷新
		if (this.selectCity === city && this.selectPark === park && this.selectKeyword === formData.keyword) { // 无效的搜索
			this.hasSelect = false;
		} else {
			this.hasSelect = true;
		}
		this.setState({
			selectKeyWord: formData.keyword,
			cityValueCode: city,
			parkValueCode: park,
		});
	}
	// 添加按钮
	handleAdd() {
		const me = this;
		// 清空描述输入框的值
		this.form_address_dis && this.form_address_dis.setValues({
			description: '',
		});
		// 清空选中数据
		me.setState({
			newCityValue: '',
			newParkValue: '',
			newLocationValue: '',
			newRegionValue: '',
			newHouseValue: [],
			newParkCollection: {},
			newLocationCollection: {},
			addressDialog: true,
		});
		http('/linkage/locationStoreMap/getCity.json').then((res) => {
			if (!res.hasError) {
				me.setState({
					cityCollection: res,
				});
				for (let i = 0; i < Object.keys(res).length; i++) {
					me.cityMap.set(res[Object.keys(res)[i]], Object.keys(res)[i]);
				}
			}
		});
		// // 获取所属区域
		http('/linkage/locationStoreMap/getRegion.json').then((res) => {
			if (!res.hasError) {
				me.setState({
					newRegionCollection: res,
				});
			}
		});
		// // 获取库房
		http('/linkage/locationStoreMap/getStoreHouse.json').then((res) => {
			if (!res.hasError) {
				me.setState({
					newHouseCollection: res.slice(0, 10),
				});
				res.map((item) => {
					me.newHouseMap.set(item.name, item.id);
					return '';
				});
			}
		});
		me.setState({
			addressDialog: true,
		}, () => {
			me.newParkCloseEl = document.getElementsByClassName('new-park-box')[0].getElementsByClassName('kuma-select2-selection__clear')[0];
			me.newParkCloseEl.style.display = 'none';
			me.newLocationCloseEl = document.getElementsByClassName('new-location-box')[0].getElementsByClassName('kuma-select2-selection__clear')[0];
			me.newLocationCloseEl.style.display = 'none';
			me.newCityCloseEl = document.getElementsByClassName('new-city-box')[0].getElementsByClassName('kuma-select2-selection__clear')[0];
			me.newCityCloseEl.style.display = 'none';
			me.newRagionCloseEl = document.getElementsByClassName('new-area-box')[0].getElementsByClassName('kuma-select2-selection__clear')[0];
			me.newRagionCloseEl.style.display = 'none';
		});
	}
	// 添加城市改变
	handleNewCity(value) {
		const me = this;
		if (value) {
			me.setState({
				newCityValue: value,
				newParkValue: '',
				newLocationValue: '', // 改变的时候先清空下面的
				newLocationCollection: {},
			});
			if (me.newCityCloseEl) {
				me.newCityCloseEl.style.display = 'inline';
			}
			http('/linkage/locationStoreMap/getPark.json?cityCode=' + me.cityMap.get(value)).then((res) => {
				if (res.hasError) { // 输入有误
					me.setState({
						newParkCollection: {},
						newLocationCollection: {},
					});
				} else {
					for (let i = 0; i < Object.keys(res).length; i++) {
						me.parkMap.set(res[Object.keys(res)[i]], Object.keys(res)[i]);
					}
					me.setState({
						newParkCollection: res,
					});
				}
			});
			http('/linkage/locationStoreMap/getStoreHouse.json?city=' + value).then((res) => {
				if (!res.hasError) { // 有返回的库房
					me.setState({
						newHouseCollection: res,
					});
				} else {
					me.setState({
						newHouseCollection: [],
						newHouseValue: [],
					});
				}
			});
		} else { // 没有输入值
			me.newCityCloseEl.style.display = 'none';
			me.newParkCloseEl.style.display = 'none';
			me.newLocationCloseEl.style.display = 'none';
			// 清空
			me.setState({
				newParkCollection: {},
				newLocationCollection: {},
				newParkValue: '',
				newLocationValue: '',
				newCityValue: '',
				newHouseValue: [],
				newHouseCollection: [],
			});
		}
	}
	// 添加园区改变
	handleNewPark(value) {
		const me = this;
		if (value) {
			me.setState({
				newParkValue: value,
				newLocationValue: '',
			});
			// 获取地点
			http('/linkage/locationStoreMap/getLocation.json?cityCode=' +
				me.cityMap.get(me.state.newCityValue) + '&parkCode=' +
				me.parkMap.get(value)).then((res) => {
				if (res.hasError) { // 可以输入
				} else {
					for (let i = 0; i < Object.keys(res).length; i++) {
						me.locationMap.set(res[Object.keys(res)[i]], Object.keys(res)[i]);
					}
					me.setState({
						newLocationCollection: res,
						newLocationValue: '',
					});
				}
			});
			if (me.newParkCloseEl) {
				me.newParkCloseEl.style.display = 'inline-block';
			}
		} else {
			me.newParkCloseEl.style.display = 'none';
			me.newLocationCloseEl.style.display = 'none';
			me.setState({
				newLocationCollection: {},
				newParkValue: '',
				newLocationValue: '',
			});
		}
	}
	// 新增地点改变
	handleNewLocation(value) {
		const me = this;
		if (value) {
			if (me.newLocationCloseEl) {
				me.newLocationCloseEl.style.display = 'inline-block';
			}
			this.setState({
				newLocationValue: value,
			});
		} else {
			if (me.newLocationCloseEl) {
				me.newLocationCloseEl.style.display = 'none';
			}
			this.setState({
				newLocationValue: '',
			});
		}
	}
	// 关联库房选择
	handleNewHouse(value) {
		this.setState({
			newHouseValue: value,
		});
	}
	// 所属库房改变
	handleNewRegion(value) {
		this.setState({
			newRegionValue: value,
		});
	}
	// 新增领用地点提交
	createAddress() {
		const me = this;
		const city = this.state.newCityValue;
		const park = this.state.newParkValue;
		const location = this.state.newLocationValue;
		const regionId = this.state.newRegionValue.split(',')[0];
		const regionName = this.state.newRegionValue.split(',')[1];
		const description = this.form_address_dis.getValues().values.description;
		const house = this.state.newHouseValue;
		if (!city) {
			Message.error('城市必填！');
			return;
		}
		if (!park) {
			Message.error('园区必填！');
			return;
		}
		if (!location) {
			Message.error('领用地点必填！');
			return;
		}
		if (!regionName) {
			Message.error('所属区域必填！');
			return;
		}
		// // 拼接json字符串
		const cityCode = this.cityMap.get(city);
		const parkCode = this.parkMap.get(park);
		const locationCode = this.locationMap.get(location);
		const storeHouseId = house.map((item) => me.newHouseMap.get(item)).join(',');
		const storeHouseName = house.join(',');
		const reqData = {
			city,
			cityCode,
			park,
			parkCode,
			location,
			locationCode,
			regionId,
			regionName,
			description,
			storeHouseName,
			storeHouseId,
		};
		const strData = JSON.stringify(reqData, (key, value) => {
			if (key === 'storeHouseName') {
				value = encodeURIComponent(value);
			}
			return value;
		});
		http('/linkage/locationStoreMap/addOrUpdateLocation.json?locationMapping=' + strData).then((res) => {
			if (res.hasError) {
				Message.error(res.content, 3);
			} else {
				Message.success('新增成功！');
				// 关闭diaog
				this.setState({
					addressDialog: false,
				});
				// 更新表格
				this.table.fetchData();
				http('/linkage/locationStoreMap/getCity.json').then((resCity) => {
					if (!resCity.hasError) {
						me.setState({
							cityCollection: resCity,
						});
						for (let i = 0; i < Object.keys(resCity).length; i++) {
							me.cityMap.set(resCity[Object.keys(resCity)[i]], Object.keys(resCity)[i]);
						}
					}
				});
			}
		});
	}
	// 表格返回数据处理
	tableBackData(tableData) {
		this.hasSelect = false; // 数据返回后恢复为无效值
		return {
			...tableData,
			data: tableData.data.map((item) => ({
				...item,
				storeHouseName: item.storeHouseName.split(',').map((name) => (<div title={name} className="table-house-item">{name}</div>)),
			})),
		};
	}
	// table编辑
	tableEdit(tableData) {
		const me = this;
		me.setState({
			editId: tableData.id,
		});
		// 判断地点是否有编辑权限
		http.get('/linkage/locationStoreMap/canChange.json').then((res) => {
			this.setState({
				editSuper: res.super,
			});
		});
		// 获取初始园区
		http('/linkage/locationStoreMap/getPark.json?cityCode=' + tableData.cityCode).then((res) => {
			if (!res.hasError) {
				for (let i = 0; i < Object.keys(res).length; i++) {
					me.parkMap.set(res[Object.keys(res)[i]], Object.keys(res)[i]);
				}
				me.setState({
					newParkCollection: res,
				});
			}
		});
		// 获取初始领用地点
		http('/linkage/locationStoreMap/getLocation.json?cityCode=' + tableData.cityCode + '&parkCode=' + tableData.parkCode).then((res) => {
			if (!res.hasError) {
				for (let i = 0; i < Object.keys(res).length; i++) {
					me.locationMap.set(res[Object.keys(res)[i]], Object.keys(res)[i]);
				}
				me.setState({
					newLocationCollection: res,
				});
			}
		});
		// 获取所属区域
		http('/linkage/locationStoreMap/getRegion.json').then((res) => {
			if (!res.hasError) {
				me.setState({
					newRegionCollection: res,
				});
			}
		});
		// 获取关联库房
		http('/linkage/locationStoreMap/getStoreHouse.json').then((res) => {
			if (!res.hasError) {
				res.map((item) => {
					me.newHouseMap.set(item.name, item.id);
					return '';
				});
				me.setState({
					newHouseCollection: res,
				});
			}
		});
		http('/linkage/locationStoreMap/getLocationById.json?id=' + tableData.id).then((res) => {
			if (!res.hasError) {
				this.oldLocationValue = res.location;				
				const storeHouseNameReq = res.storeHouseName;
				const storeHouseNameReslut = storeHouseNameReq && storeHouseNameReq.split(',');
				// 所属区域
				const ragionReslut = res.regionId + ',' + res.regionName;
				// 把旧的storeHouseName 和 storeHouseId 匹配上
				res.storeHouseName.split(',').map((storeHouse, index) => {
					me.newHouseMap.set(storeHouse, res.storeHouseId.split(',')[index]);
					return '';
				});
				this.setState({ 
					editAddressDialog: true,
					editData: res,
					newCityValue: res.city,
					newParkValue: res.park,
					newLocationValue: res.location,
					newRegionValue: ragionReslut,
					newHouseValue: storeHouseNameReslut,
				}, () => {
					this.form_address_dis_edit.setValues({
						description: res.description,
					});
				});
			}
		});
	}
	// 编辑提交
	editeAddress() {
		const me = this;
		const city = this.state.newCityValue;
		const park = this.state.newParkValue;
		const location = this.state.newLocationValue;
		const regionId = this.state.newRegionValue.split(',')[0];
		const regionName = this.state.newRegionValue.split(',')[1];
		const description = this.form_address_dis_edit.getValues().values.description;
		const house = this.state.newHouseValue;
		const cityCode = this.cityMap.get(city);
		const parkCode = this.parkMap.get(park);
		const locationCode = this.locationMap.get(location) || this.locationMap.get(this.oldLocationValue);
		const storeHouseId = house.map((item) => me.newHouseMap.get(item)).join(',');
		const storeHouseName = house.join(',');
		const reqData = {
			city,
			cityCode,
			park,
			parkCode,
			location,
			locationCode,
			regionId,
			regionName,
			description,
			storeHouseName,
			storeHouseId,
			edit: true, // 编辑
			id: me.state.editId,
		};
		const strData = JSON.stringify(reqData, (key, value) => {
			if (key === 'storeHouseName') {
				value = encodeURIComponent(value); // 处理#传不过去
			}
			return value;
		});
		http('/linkage/locationStoreMap/addOrUpdateLocation.json?locationMapping=' + strData).then((res) => {
			if (res.hasError) {
				Message.error(res.content, 3);
			} else {
				Message.success(res.content, 2);
				this.table.fetchData();
				me.setState({
					editAddressDialog: false,
				});
			}
		});
	}
	// table 删除
	tableDelete(tableData) {
		const me = this;
		Dialog.confirm({
			title: '确定删除吗？',
			content: '目标删除后将不可恢复，如有子目标将会被同时删除！',
			onOk() {
				// 执行删除逻辑
				http('/linkage/locationStoreMap/DeleteLocation.json?id=' + tableData.id + '&storeHouseId=' + tableData.storeHouseId).then((res) => {
					if (!res.hasError) { // 删除成功
						Message.success('删除成功！');
						me.table.fetchData();
					} else {
						Message.error(res.content, 3);
					}
				});
				// 刷新表格数据
			},
			onCancel() {},
		});
	}
	// // table 请求之前
	tableBeforeFetch(data) {
		if (this.hasSelect) {
			data.currentPage = 1;
		}
		return data;
	}
	render() {
		const me = this;
		const cityOptionItem = me.state.cityCollection;
		const parkOptionItem = me.state.parkCollection;
		const newParkOptionTtem = me.state.newParkCollection;
		const newLocationOptionItem = me.state.newLocationCollection;
		const newRegionOptionItem = me.state.newRegionCollection;
		const newHouseOptionItem = me.state.newHouseCollection;
		// console.log(JSON.parse(newRegionOptionItem))
		// 搜索城市options
		const selectCityOptions = Object.keys(cityOptionItem).map((item) => <Option key={cityOptionItem[item]}>{cityOptionItem[item]}</Option>);
		// 搜索园区options
		const selectParkOptions = Object.keys(parkOptionItem).map((item) => <Option key={parkOptionItem[item]}>{parkOptionItem[item]}</Option>);
		// 新增园区options
		const newParkOptions = Object.keys(newParkOptionTtem).map((item) => <Option key={newParkOptionTtem[item]}>{newParkOptionTtem[item]}</Option>);
		// 新增库房options
		const newLocationOptions = Object.keys(newLocationOptionItem).map((item) => <Option key={newLocationOptionItem[item]}>{newLocationOptionItem[item]}</Option>);
		// 新增区域options
		const newRegionOptions = newRegionOptionItem.length && newRegionOptionItem.map((item) => <Option key={item.id + ',' + item.name}>{item.name}</Option>);
		// 新增关联库房options
		const newHouseOptions = newHouseOptionItem.length && newHouseOptionItem.map((item) => (<Option key={item.name}>{item.name}</Option>));
		// 表格表头
		const columns = [
			{
				dataKey: 'city',
				title: '城市',
				width: 150,
			},
			{
				dataKey: 'park',
				title: '园区',
				width: 150,
			},
			{
				dataKey: 'location',
				title: '位置',
				width: 150,
			},
			{
				dataKey: 'regionName',
				title: '区域',
				width: 150,
			},
			{
				dataKey: 'storeHouseName',
				title: '关联库房',
				width: 390,
			},
			{
				dataKey: 'action',
				title: '操作',
				width: 150,
				type: 'action',
				actions: [
					{
						title: '编辑',
						callback: me.tableEdit.bind(this),
					},
					{
						title: '删除',
						callback: me.tableDelete.bind(this),
						render: (title, rowData) => {
							if (rowData.isDeleted === 'n') { // 没有删除
								return title;
							}
							return false;
						},
					},
				],
			},
		];
		const renderProps = {
			fetchUrl: '/linkage/locationStoreMap/getLocationList.json',
			jsxcolumns: columns,
			showPager: true,
			showPagerTotal: true,
			beforeFetch: me.tableBeforeFetch.bind(me),
			fetchParams: { // 请求数据参数
				cityCode: me.state.cityValueCode,
				parkCode: me.state.parkValueCode,
				keyword: me.state.selectKeyWord,
				// [me.hasSelect ? 'currentPage' : '']: 1,
			},
			// onPagerChange: me.tablePageChange.bind(me),
			processData: me.tableBackData.bind(this),
			className: 'table-container',
			doubleClickToEdit: false,
		};
		return (
			<div className="useAddress-container">
				<div className="title">
					<span>领用地点维护</span>
				</div>
				<div className="select-box">
					<div className="select">
						<div className="city-label">城市：</div>
						<Select allowClear className="select2-city" onChange={me.handleCityChange.bind(me)} dropdownClassName="kuma-select2-selected-has-icon">
							{selectCityOptions}
						</Select>
						<div className="city-label">园区：</div>
						<Select allowClear value={me.state.parkValue} onChange={me.handleParkChange.bind(me)} className="select2-park" dropdownClassName="kuma-select2-selected-has-icon">
							{selectParkOptions}
						</Select>
						<div className="keyword-label">关键字：</div>
						<Form ref={(c) => { this.form_select_keywords = c; }}>
							<InputFormField jsxname="keyword" />
						</Form>
					</div>
					<Button className="select-btn" onClick={me.handleSelect.bind(me)}><Icon name="sousuo" /></Button>
					<div className="space" />
					<Button type="outline" className="addBtn" onClick={me.handleAdd.bind(me)}>新增</Button>
				</div>
				<div className="table-box">
					<Table ref={(c) => { this.table = c; }} {...renderProps} />
				</div>
				{/* 添加领用地弹窗 */}
				<Dialog
					title="领用地点新增"
					className="add-address"
					visible={me.state.addressDialog}
					onCancel={() => {
						this.setState({
							addressDialog: false,
						});
					}}
					onOk={me.createAddress.bind(me)}
				>
					<div className="new-city-box">
						<span className="city-label">城市：</span>
						<Select value={me.state.newCityValue} combobox allowClear style={{ width: 200 }} className="new-city" onChange={me.handleNewCity.bind(me)} dropdownClassName="kuma-select2-selected-has-icon">
							{selectCityOptions}
						</Select>
					</div>
					<div className="new-park-box">
						<span className="city-label">园区：</span>
						<Select value={me.state.newParkValue} combobox allowClear style={{ width: 200 }} className="new-park" onChange={me.handleNewPark.bind(me)} dropdownClassName="kuma-select2-selected-has-icon">
							{newParkOptions}
						</Select>
					</div>
					<div className="new-location-box">
						<span className="city-label">领用地点：</span>
						<Select value={me.state.newLocationValue} combobox allowClear style={{ width: 200 }} className="new-location" onChange={me.handleNewLocation.bind(me)} dropdownClassName="kuma-select2-selected-has-icon">
							{newLocationOptions}
						</Select>
					</div>
					<div className="new-area-box">
						<span className="city-label">所属区域：</span>
						<Select value={me.state.newRegionValue} allowClear style={{ width: 200 }} showSearch={false} className="new-region" onChange={me.handleNewRegion.bind(me)} dropdownClassName="kuma-select2-selected-has-icon">
							{newRegionOptions}
						</Select>
					</div>
					<div className="new-dis-box">
						<Form ref={(c) => { this.form_address_dis = c; }}>
							<InputFormField jsxname="description" jsxlabel="描述：" />
						</Form>
					</div>
					<div className="new-house-box">
						<span className="city-label">关联库房：</span>
						<Select value={me.state.newHouseValue} multiple showSearch={false} style={{ width: 200 }} className="new-house" onChange={me.handleNewHouse.bind(me)} dropdownClassName="kuma-select2-selected-has-icon">
							{newHouseOptions}
						</Select>
					</div>
				</Dialog>
				{/* 领用地点编辑 */}
				<Dialog title="领用地点编辑"
					className="edit-address"
					visible={me.state.editAddressDialog}
					onCancel={() => {
						this.setState({
							editAddressDialog: false,
						});
					}}
					onOk={me.editeAddress.bind(me)}
				>
					<div className="new-city-box">
						<span className="city-label">城市：</span>
						<Select value={me.state.newCityValue} showSearch={false} style={{ width: 200 }} className="new-city" onChange={me.handleNewCity.bind(me)} dropdownClassName="kuma-select2-selected-has-icon">
							{selectCityOptions}
						</Select>
					</div>
					<div className="new-park-box">
						<span className="city-label">园区：</span>
						<Select showSearch={false} value={me.state.newParkValue} style={{ width: 200 }} className="new-park" onChange={me.handleNewPark.bind(me)} dropdownClassName="kuma-select2-selected-has-icon">
							{newParkOptions}
						</Select>
					</div>
					<div className="new-location-box">
						<span className="city-label">领用地点：</span>
						<Select combobox={this.state.editSuper} value={me.state.newLocationValue} style={{ width: 200 }} className="new-location" onChange={me.handleNewLocation.bind(me)} dropdownClassName="kuma-select2-selected-has-icon">
							{newLocationOptions}
						</Select>
					</div>
					<div className="new-area-box">
						<span className="city-label">所属区域：</span>
						<Select value={me.state.newRegionValue} style={{ width: 200 }} showSearch={false} className="new-region" onChange={me.handleNewRegion.bind(me)} dropdownClassName="kuma-select2-selected-has-icon">
							{newRegionOptions}
						</Select>
					</div>
					<div className="new-dis-box">
						<Form ref={(c) => { this.form_address_dis_edit = c; }}>
							<InputFormField jsxname="description" jsxlabel="描述：" />
						</Form>
					</div>
					<div className="new-house-box">
						<span className="city-label">关联库房：</span>
						<Select showSearch={false} value={me.state.newHouseValue} multiple style={{ width: 200 }} className="new-house" onChange={me.handleNewHouse.bind(me)} dropdownClassName="kuma-select2-selected-has-icon">
							{newHouseOptions}
						</Select>
					</div>
				</Dialog>
			</div>
		);
	}
}

export default UseAddress;
/**
 * Table
 * 样式覆盖去掉滚动条
 * 样式指定最小高度
 */
// "indent": ["error","tab"], 使用tab缩进
// SelectFormField combobox可输入, 输入的时候获取参数
// 新增关联库房 value值为空，鼠标悬浮options会有警告提示
// https://www.cnblogs.com/smalldark/p/6496675.html
// 分页，搜索数据分页要置为第一页
<file_sep>import * as React from 'react';
import * as ReactDOM from 'react-dom';
import ViewTask from './viewTask';

ReactDOM.render(
	<ViewTask />,
	document.getElementById('ViewTask'),
);
