Skip to content
Permalink
641b60ed52
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
1 lines (1 sloc) 105 KB
[{"C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\index.js":"1","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\App.js":"2","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\reportWebVitals.js":"3","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\router\\router.js":"4","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\view\\mybook.js":"5","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\view\\login.js":"6","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\view\\index.js":"7","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\view\\search.js":"8","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\view\\detail.js":"9","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\view\\message.js":"10","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\api\\api.js":"11","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\view\\myLend.js":"12","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\view\\address.js":"13","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\view\\lendBook.js":"14","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\view\\mesMgr.js":"15","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\components\\load.js":"16","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\components\\book.js":"17","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\components\\search.js":"18","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\components\\header.js":"19","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\components\\detail.js":"20","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\components\\row.js":"21","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\api\\index.js":"22","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\components\\searchInput.js":"23","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\api\\request.js":"24"},{"size":563,"mtime":1608303524048,"results":"25","hashOfConfig":"26"},{"size":683,"mtime":1608453600607,"results":"27","hashOfConfig":"26"},{"size":362,"mtime":499162500000,"results":"28","hashOfConfig":"26"},{"size":975,"mtime":1608625562127,"results":"29","hashOfConfig":"26"},{"size":16400,"mtime":1608904587408,"results":"30","hashOfConfig":"26"},{"size":9058,"mtime":1608889978375,"results":"31","hashOfConfig":"26"},{"size":4526,"mtime":1608889453340,"results":"32","hashOfConfig":"26"},{"size":1173,"mtime":1608905156697,"results":"33","hashOfConfig":"26"},{"size":1286,"mtime":1608889372380,"results":"34","hashOfConfig":"26"},{"size":6858,"mtime":1608903879928,"results":"35","hashOfConfig":"26"},{"size":2946,"mtime":1608887075390,"results":"36","hashOfConfig":"26"},{"size":7602,"mtime":1608905137688,"results":"37","hashOfConfig":"26"},{"size":6850,"mtime":1608889361516,"results":"38","hashOfConfig":"26"},{"size":4474,"mtime":1608889600965,"results":"39","hashOfConfig":"26"},{"size":6200,"mtime":1608890606218,"results":"40","hashOfConfig":"26"},{"size":459,"mtime":1608888994131,"results":"41","hashOfConfig":"26"},{"size":2447,"mtime":1608887584887,"results":"42","hashOfConfig":"26"},{"size":629,"mtime":1608616685063,"results":"43","hashOfConfig":"26"},{"size":4691,"mtime":1608888964406,"results":"44","hashOfConfig":"26"},{"size":9323,"mtime":1608888201143,"results":"45","hashOfConfig":"26"},{"size":734,"mtime":1608278947361,"results":"46","hashOfConfig":"26"},{"size":581,"mtime":1608887134297,"results":"47","hashOfConfig":"26"},{"size":1206,"mtime":1608889060694,"results":"48","hashOfConfig":"26"},{"size":1523,"mtime":1608887521642,"results":"49","hashOfConfig":"26"},{"filePath":"50","messages":"51","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},"1h25s71",{"filePath":"53","messages":"54","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"55","messages":"56","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"57","messages":"58","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"59","messages":"60","errorCount":0,"warningCount":18,"fixableErrorCount":0,"fixableWarningCount":0,"source":"61","usedDeprecatedRules":"52"},{"filePath":"62","messages":"63","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"64","usedDeprecatedRules":"52"},{"filePath":"65","messages":"66","errorCount":0,"warningCount":9,"fixableErrorCount":0,"fixableWarningCount":0,"source":"67","usedDeprecatedRules":"52"},{"filePath":"68","messages":"69","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"70","messages":"71","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"72","usedDeprecatedRules":"52"},{"filePath":"73","messages":"74","errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"75","usedDeprecatedRules":"52"},{"filePath":"76","messages":"77","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"78","messages":"79","errorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":0,"source":"80","usedDeprecatedRules":"52"},{"filePath":"81","messages":"82","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"83","usedDeprecatedRules":"52"},{"filePath":"84","messages":"85","errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"86","usedDeprecatedRules":"52"},{"filePath":"87","messages":"88","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"89","usedDeprecatedRules":"52"},{"filePath":"90","messages":"91","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"92","messages":"93","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"94","usedDeprecatedRules":"52"},{"filePath":"95","messages":"96","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"97","messages":"98","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"99","usedDeprecatedRules":"52"},{"filePath":"100","messages":"101","errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"102","usedDeprecatedRules":"52"},{"filePath":"103","messages":"104","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"105","messages":"106","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"107","usedDeprecatedRules":"52"},{"filePath":"108","messages":"109","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"110","usedDeprecatedRules":"52"},{"filePath":"111","messages":"112","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"113"},"C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\index.js",[],["114","115"],"C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\App.js",[],"C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\reportWebVitals.js",[],"C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\router\\router.js",[],"C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\view\\mybook.js",["116","117","118","119","120","121","122","123","124","125","126","127","128","129","130","131","132","133"],"import React, { Component } from 'react'\r\n// import './header.css'\r\nimport {\r\n Link\r\n} from 'react-router-dom';\r\nimport '../assets/css/MyBook.css'\r\nimport { Button, MessageBox, Dialog, Notification,Form, Table, Tag, Icon, Switch, Input, Checkbox, Radio, Upload, Message, Tabs } from 'element-react';\r\nimport { Book } from '../components/book'\r\nimport ReactFileReader from \"react-file-reader\";\r\nimport { Headers } from '../components/header'\r\nimport { RowLayout } from '../components/row'\r\nimport {Address} from './address'\r\nimport {Infos} from './message'\r\nimport {Mylend} from './myLend'\r\nimport {MyLendBook} from './lendBook'\r\nimport {MgrMes} from './mesMgr'\r\nimport { uploadImg, addBook, getMyBook,editBook,deleteBook,changBookStatus,allBookStatus,getmessage} from '../api/api.js'\r\nexport class MyBook extends Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n myLends:[],\r\n allMes:[],\r\n list: [],\r\n activeName:'1',\r\n userInfo: localStorage.getItem('userInfo'),\r\n form: {\r\n book_name: '',\r\n author: '',\r\n ISBN: '',\r\n status: '',\r\n desc: ''\r\n },\r\n status:false,\r\n type: false,//true is to add\r\n imageUrl: '',\r\n columns: [\r\n {\r\n type: 'index'\r\n },\r\n {\r\n label: \"Book cover\",\r\n align: 'center',\r\n prop: \"img_url\",\r\n width: 120,\r\n render: function (data) {\r\n return (\r\n <span>\r\n <img className=\"table-book-img\" src={'http://localhost:3000' + data.img_url} alt=\"No picture yet\"></img>\r\n </span>)\r\n }\r\n },\r\n {\r\n label: \"The title of the book\",\r\n prop: \"book_name\",\r\n align: 'center',\r\n width: 160,\r\n render: function (data) {\r\n return <span>{data.book_name}</span>\r\n }\r\n },\r\n {\r\n label: \"Book author\",\r\n prop: \"author\",\r\n align: 'center',\r\n width: 160,\r\n render: function (data) {\r\n return <span>{data.author}</span>\r\n }\r\n },\r\n {\r\n label: \"ISBN\",\r\n prop: \"ISBN\",\r\n align: 'center',\r\n width: 160,\r\n render: function (data) {\r\n return <span>{data.ISBN}</span>\r\n }\r\n },\r\n {\r\n label: \"Introduction\",\r\n prop: \"desc\",\r\n align: 'center',\r\n render: function (data) {\r\n return <span>{data.desc}</span>\r\n }\r\n },\r\n {\r\n label: \"Introduction\",\r\n prop: \"status\",\r\n align: 'center',\r\n render: function (data) {\r\n return <span>{data.status==2?'normal':data.status==3?'Cannot be loaned out':'Has been lent'}</span>\r\n }\r\n },\r\n {\r\n label: \"operating\",\r\n prop: \"address\",\r\n align: 'center',\r\n fixed: 'right',\r\n width: 260,\r\n render: (data) => {\r\n let btn;\r\n if (data.status !== 1) {\r\n btn = (\r\n <Button type=\"primary\" onClick={this.changBookStatuss.bind(this,data)} size=\"small\">Mark as{data.status == 2 ? 'Cannot be borrowed' : 'Can be borrowed'}</Button>\r\n )\r\n } else {\r\n btn = (\r\n <Button type=\"info\" size=\"small\">The book has been lent</Button>\r\n )\r\n }\r\n return (\r\n <span>\r\n <Button plain={true} type=\"info\" onClick={this.showEdit.bind(this, data)} size=\"small\">edit</Button>\r\n {\r\n btn\r\n }\r\n <Button type=\"danger\" onClick={this.deleteBook.bind(this,data)} size=\"small\">delete</Button>\r\n </span>\r\n )\r\n }\r\n }\r\n ],\r\n };\r\n }\r\n componentDidMount = () => {\r\n if(this.props.match.params.status){\r\n this.setState({\r\n activeName:this.props.match.params.status.toString()\r\n })\r\n }\r\n let info = JSON.parse(this.state.userInfo)\r\n if (!this.state.userInfo) {\r\n MessageBox.confirm('You are not logged in, do you want to log in?', 'prompt', {\r\n cancelButtonText: 'Return to the homepage',\r\n confirmButtonText: 'Go log in',\r\n type: 'warning'\r\n }).then(() => {\r\n this.props.history.push({ pathname: '/login' })\r\n }).catch(() => {\r\n this.props.history.push({ pathname: '/' })\r\n });\r\n return\r\n }\r\n this.getData()\r\n this.getBook()\r\n \r\n }\r\n getStatus=(e)=>{\r\n this.setState({\r\n status:e\r\n })\r\n }\r\n getData=()=>{\r\n let user = JSON.parse(localStorage.getItem('userInfo')).user;\r\n getmessage({ uid: user.id }).then(res => {\r\n this.setState({\r\n myLends: res.data.a,\r\n allMes:res.data.a.concat(res.data.b)\r\n })\r\n })\r\n }\r\n toMesage=()=>{\r\n console.log(this.state.activeName)\r\n this.setState({\r\n activeName:\"5\"\r\n })\r\n }\r\n changeTab=(i)=>{\r\n this.setState({\r\n activeName:i\r\n })\r\n }\r\n // Get my book\r\n getBook=()=>{\r\n let info = JSON.parse(this.state.userInfo)\r\n getMyBook({ id: info.user.id }).then(res => {\r\n this.setState({\r\n list: res.data\r\n })\r\n })\r\n }\r\n // Open for editing\r\n showEdit = (e) => {\r\n let status=e.status==2?true:false\r\n this.setState({\r\n type: true,\r\n status,\r\n dialogVisible: true,\r\n form: Object.assign({}, e),\r\n imageUrl: e.img_url,\r\n \r\n })\r\n \r\n\r\n }\r\n // delete book\r\n deleteBook=(e)=>{\r\n if(e.status==1){\r\n Notification({\r\n title: 'caveat',\r\n message: 'The book has been lent and cannot be deleted',\r\n type: 'warning'\r\n });\r\n return\r\n }\r\n deleteBook(e).then(res=>{\r\n if(res.data==1){\r\n Notification({\r\n title: 'successful',\r\n message: 'successfully deleted',\r\n type: 'success'\r\n });\r\n this.getBook()\r\n }else{\r\n Notification({\r\n title: 'failure',\r\n message: 'failed to delete',\r\n type: 'warning'\r\n });\r\n }\r\n })\r\n }\r\n onSubmit(e) {\r\n e.preventDefault();\r\n }\r\n changeAll=(e)=>{\r\n allBookStatus({\r\n type:e,\r\n list:this.state.list\r\n }).then(res=>{\r\n this.getBook()\r\n })\r\n }\r\n changBookStatuss=(e)=>{\r\n let status=e.status==2?3:2\r\n changBookStatus({\r\n status,\r\n id:e.id,\r\n user_id:e.user_id\r\n }).then(res=>{\r\n this.getBook()\r\n })\r\n }\r\n onChange(key, value) {\r\n console.log(key, value)\r\n this.state.form[key] = value;\r\n this.forceUpdate();\r\n }\r\n // Get the base64 address of the uploaded image\r\n handleFiles = (files) => {\r\n let base = files.base64.replace(/^data:image\\/\\w+;base64,/, '')\r\n uploadImg({ content: base }).then(res => {\r\n console.log(res.data.path, 8888)\r\n this.setState({ imageUrl: res.data.path.slice(8, 99999) });\r\n })\r\n }\r\n submit = () => {\r\n console.log(this.state.form)\r\n let temp = Object.assign({}, this.state.form)\r\n temp.img_url = this.state.imageUrl;\r\n temp.user_id = JSON.parse(this.state.userInfo).user.id;\r\n temp.status = this.state.status ? 2 : 3\r\n if(this.state.type){\r\n this.editBooks(temp)\r\n }else{\r\n this.addBooks(temp)\r\n }\r\n }\r\n // Add to\r\n addBooks=(temp)=>{\r\n addBook(temp).then((res) => {\r\n Notification({\r\n title: 'successful',\r\n message: 'Added successfully',\r\n type: 'success'\r\n });\r\n this.setState({ dialogVisible: false })\r\n this.getBook()\r\n })\r\n }\r\n // edit\r\n editBooks=(temp)=>{\r\n editBook(temp).then(res=>{\r\n console.log(res)\r\n Notification({\r\n title: 'successful',\r\n message: 'Edited successfully',\r\n type: 'success'\r\n });\r\n this.setState({ dialogVisible: false })\r\n this.getBook()\r\n })\r\n }\r\n render() {\r\n if (!this.state.userInfo) {\r\n return (<div>\r\n Not logged in yet\r\n </div>)\r\n }\r\n let upload, book;\r\n if (this.state.imageUrl) {\r\n upload = (\r\n <img alt=\"Failed to load\" className=\"upload-book-img\" src={'http://localhost:3000' + this.state.imageUrl}></img>\r\n )\r\n } else {\r\n upload = (\r\n <i className=\"el-icon-picture up-icon\"></i>\r\n )\r\n }\r\n if (this.state.list.length > 0) {\r\n book = (<div> <Book list={this.state.list}></Book></div>)\r\n } else {\r\n book = (<div className=\"nulls\">It's empty here</div>)\r\n }\r\n return (\r\n <div>\r\n <Headers index=\"3\" mes={this.toMesage}></Headers>\r\n\r\n <RowLayout>\r\n <Tabs activeName={this.state.activeName} onTabClick={(tab) => this.setState({\r\n activeName:tab.props.name\r\n })}>\r\n <Tabs.Pane label=\"The book I uploaded\" name=\"1\">\r\n <div className=\"m10\">\r\n <Button onClick={() => this.setState({\r\n dialogVisible: true, type: false, form: {\r\n book_name: '',\r\n author: '',\r\n ISBN: '',\r\n status: '',\r\n desc: ''\r\n }, imageUrl: ''\r\n })}>Add books</Button>\r\n <Button onClick={this.changeAll.bind(this,true)}>Mark all books as unavailable for borrowing</Button>\r\n <Button onClick={this.changeAll.bind(this,false)}>Mark all books as available for loan</Button>\r\n </div>\r\n\r\n <Table\r\n style={{ width: '100%' }}\r\n columns={this.state.columns}\r\n data={this.state.list}\r\n border={true}\r\n height=\"70vh\"\r\n highlightCurrentRow={true}\r\n onCurrentChange={item => { console.log(item) }}\r\n />\r\n </Tabs.Pane>\r\n <Tabs.Pane label=\"Books I borrowed\" name=\"2\"><Mylend></Mylend></Tabs.Pane>\r\n <Tabs.Pane label=\"Approval management\" name=\"mes\">\r\n <Infos getLend={this.getData} myLends={this.state.myLends}></Infos>\r\n </Tabs.Pane>\r\n <Tabs.Pane label=\"Address management\" name=\"3\"><Address></Address></Tabs.Pane>\r\n <Tabs.Pane label=\"Message management\" name=\"5\">\r\n <MgrMes changeTab={this.changeTab} allMes={this.state.allMes}></MgrMes>\r\n </Tabs.Pane>\r\n <Tabs.Pane label=\"The book I lent\" name=\"6\">\r\n <MyLendBook></MyLendBook>\r\n </Tabs.Pane>\r\n </Tabs>\r\n\r\n\r\n {/* {book} */}\r\n </RowLayout>\r\n\r\n <Dialog\r\n title={this.state.type ? 'Edit the book' : 'Add books'}\r\n size=\"small\"\r\n\r\n visible={this.state.dialogVisible}\r\n onCancel={() => this.setState({ dialogVisible: false })}\r\n lockScroll={false}\r\n >\r\n <Dialog.Body>\r\n <Form model={this.state.form} labelWidth=\"80\" onSubmit={this.onSubmit.bind(this)}>\r\n <Form.Item label=\"The title of the book\">\r\n <Input value={this.state.form.book_name} onChange={this.onChange.bind(this, 'book_name')}></Input>\r\n </Form.Item>\r\n <Form.Item label=\"Book author\">\r\n <Input value={this.state.form.author} onChange={this.onChange.bind(this, 'author')}></Input>\r\n </Form.Item>\r\n <Form.Item label=\"Upload the cover\">\r\n <ReactFileReader\r\n fileTypes={[\".png\", \".jpg\", \".gif\", \"jpeg\"]}\r\n base64\r\n multipleFiles={!1}\r\n handleFiles={this.handleFiles}>\r\n <div className=\"flex-row\">\r\n {upload}\r\n </div>\r\n </ReactFileReader>\r\n </Form.Item>\r\n <Form.Item label=\"ISBN\">\r\n <Input value={this.state.form.ISBN} onChange={this.onChange.bind(this, 'ISBN')}></Input>\r\n </Form.Item>\r\n\r\n <Form.Item label=\"Whether it can be loaned out\">\r\n <Switch\r\n onText=\"\"\r\n offText=\"\"\r\n value={this.state.status}\r\n onChange={this.getStatus.bind(this)}\r\n />\r\n </Form.Item>\r\n <Form.Item label=\"Book introduction\">\r\n <Input type=\"textarea\" rows=\"6\" className=\"text-h\" value={this.state.form.desc} onChange={this.onChange.bind(this, 'desc')}></Input>\r\n </Form.Item>\r\n </Form>\r\n </Dialog.Body>\r\n <Dialog.Footer className=\"dialog-footer\">\r\n <Button onClick={() => this.setState({ dialogVisible: false })}>cancel</Button>\r\n <Button type=\"primary\" onClick={this.submit}>determine</Button>\r\n </Dialog.Footer>\r\n </Dialog>\r\n </div >\r\n )\r\n }\r\n changeRoute(path) {\r\n console.log(path)\r\n return path\r\n }\r\n inputChange = (e) => {\r\n this.setState({\r\n msg: e.target.value\r\n })\r\n }\r\n}\r\n","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\view\\login.js",["134","135"],"import React, { Component } from 'react'\r\nimport { Form, Input, Button ,Message} from 'element-react';\r\nimport '../assets/css/login.css'\r\nimport {login,registered} from '../api/api'\r\nimport {\r\n browserHistory\r\n} from 'react-router-dom';\r\nexport class Login extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n form: {\r\n pass: '',\r\n checkPass: '',\r\n status:1,\r\n email: '',\r\n account:'',\r\n password:''\r\n },\r\n rules: {\r\n account:[ { required: true, message: 'Please enter your account!', trigger: 'blur' }],\r\n password:[ { required: true, message: 'Please enter your password', trigger: 'blur' }],\r\n pass: [\r\n { required: true, message: 'Please enter your password', trigger: 'blur' },\r\n {\r\n validator: (rule, value, callback) => {\r\n if (value === '') {\r\n callback(new Error('Please enter your password'));\r\n } else {\r\n if (this.state.form.checkPass !== '') {\r\n this.refs.form.validateField('checkPass');\r\n }\r\n callback();\r\n }\r\n }\r\n }\r\n ],\r\n checkPass: [\r\n { required: true, message: 'Please enter the password again!', trigger: 'blur' },\r\n {\r\n validator: (rule, value, callback) => {\r\n if (value === '') {\r\n callback(new Error('Please enter the password again!'));\r\n } else if (value !== this.state.form.pass) {\r\n callback(new Error('The two passwords are inconsistent!'));\r\n } else {\r\n callback();\r\n }\r\n }\r\n }\r\n ],\r\n email: [\r\n { required: true, message: 'Enter the email address', trigger: 'blur' },\r\n { type: 'email', message: 'Please input the correct email address', trigger: 'blur,change' }\r\n ],\r\n age: [\r\n { required: true, message: 'Please fill in the age', trigger: 'blur' },\r\n {\r\n validator: (rule, value, callback) => {\r\n var age = parseInt(value, 10);\r\n\r\n setTimeout(() => {\r\n if (!Number.isInteger(age)) {\r\n callback(new Error('Please enter a numeric value'));\r\n } else {\r\n if (age < 18) {\r\n callback(new Error('Must be at least 18 years old'));\r\n } else {\r\n callback();\r\n }\r\n }\r\n }, 1000);\r\n }, trigger: 'change'\r\n }\r\n ]\r\n }\r\n };\r\n }\r\n onEmailChange(value) {\r\n this.setState({\r\n form: Object.assign({}, this.state.form, { email: value})\r\n });\r\n }\r\n\r\n handleSubmit(e) {\r\n e.preventDefault();\r\n this.refs.form.validate((valid) => {\r\n if (valid) {\r\n console.log(this.state.form)\r\n login(this.state.form).then(res=>{\r\n console.log(res)\r\n if(res.data.code==0){\r\n Message({\r\n message: 'login successful',\r\n type: 'success'\r\n });\r\n localStorage.setItem('userInfo',JSON.stringify(res.data))\r\n this.props.history.push({pathname: '/'})\r\n\r\n }else{\r\n Message.error(res.data.message);\r\n }\r\n })\r\n // alert('submit!');\r\n } else {\r\n console.log('error submit!!');\r\n return false;\r\n }\r\n });\r\n }\r\n\r\n handleReset(e) {\r\n e.preventDefault();\r\n\r\n this.refs.form.resetFields();\r\n }\r\n handleRegirest(e) {\r\n e.preventDefault();\r\n this.refs.form.validate((valid) => {\r\n if (valid) {\r\n let form=Object.assign({},this.state.form);\r\n let temp={\r\n user_name:form.name,\r\n account:form.email,\r\n password:form.pass\r\n }\r\n registered(temp).then(res=>{\r\n \r\n Message({\r\n message: 'registration success',\r\n type: 'success'\r\n });\r\n this.setState({\r\n status:1\r\n })\r\n\r\n // }else{\r\n // Message.error(res.data.message);\r\n // }\r\n })\r\n // alert('submit!');\r\n } else {\r\n console.log('error submit!!');\r\n return false;\r\n }\r\n });\r\n }\r\n onChange(key, value) {\r\n this.setState({\r\n form: Object.assign({}, this.state.form, { [key]: value })\r\n });\r\n }\r\n activeTab=(e)=>{\r\n this.setState({\r\n status:e\r\n })\r\n\r\n }\r\n render() {\r\n var html,form;\r\n if(this.state.status===2){\r\n html=(\r\n <div className=\"tab-line\"></div>\r\n )\r\n form=(\r\n <Form ref=\"form\" model={this.state.form} rules={this.state.rules} labelWidth=\"100\" className=\"demo-ruleForm\">\r\n <Form.Item prop=\"email\" label=\"Mail\">\r\n <Input value={this.state.form.email} onChange={this.onEmailChange.bind(this)}></Input>\r\n </Form.Item>\r\n <Form.Item prop=\"name\" label=\"nickname\">\r\n <Input value={this.state.form.name} onChange={this.onChange.bind(this, 'name')}></Input>\r\n </Form.Item>\r\n <Form.Item label=\"Password\" prop=\"pass\">\r\n <Input type=\"password\" value={this.state.form.pass} onChange={this.onChange.bind(this, 'pass')} autoComplete=\"off\" />\r\n </Form.Item>\r\n <Form.Item label=\"confimal password\" prop=\"checkPass\">\r\n <Input type=\"password\" value={this.state.form.checkPass} onChange={this.onChange.bind(this, 'checkPass')} autoComplete=\"off\" />\r\n </Form.Item>\r\n <div className=\"login-btn\">\r\n <Form.Item>\r\n <Button type=\"primary\" onClick={this.handleRegirest.bind(this)}>registerde</Button>\r\n <Button onClick={this.handleReset.bind(this)}>reset</Button>\r\n </Form.Item>\r\n </div>\r\n </Form>\r\n )\r\n }else{\r\n html=(\r\n <div className=\"active\"></div>\r\n )\r\n form=(\r\n <Form ref=\"form\" model={this.state.form} rules={this.state.rules} labelWidth=\"100\" className=\"demo-ruleForm\">\r\n <Form.Item label=\"account/mail\" prop=\"account\">\r\n <Input value={this.state.form.account} onChange={this.onChange.bind(this, 'account')} autoComplete=\"off\" />\r\n </Form.Item>\r\n <Form.Item label=\"Password\" prop=\"password\">\r\n <Input type=\"password\" value={this.state.form.password} onChange={this.onChange.bind(this, 'password')} autoComplete=\"off\" />\r\n </Form.Item>\r\n <div className=\"login-btn\">\r\n <Form.Item>\r\n <Button type=\"primary\" onClick={this.handleSubmit.bind(this)}>log in</Button>\r\n <Button onClick={this.handleReset.bind(this)}>Reset</Button>\r\n </Form.Item>\r\n </div>\r\n </Form>\r\n )\r\n }\r\n return (\r\n <div className=\"login\">\r\n <div className=\"login-w\">\r\n <div className=\"tab-list\">\r\n <div className=\"tab1\" onClick={this.activeTab.bind(this,1)}>\r\n log in\r\n </div>\r\n <div className=\"tab2\" onClick={this.activeTab.bind(this,2)}>registered</div>\r\n {html}\r\n </div>\r\n {form}\r\n </div>\r\n </div>\r\n )\r\n }\r\n}\r\n","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\view\\index.js",["136","137","138","139","140","141","142","143","144"],"import React, { Component } from 'react'\r\nimport {\r\n Link\r\n} from 'react-router-dom';\r\n// import { BrowserRouter as Router } from 'react-router-dom'\r\nimport \"../assets/css/index.css\"\r\n\r\nimport { Menu, Input, Button, Breadcrumb, Carousel } from 'element-react';\r\n// import { RouterView } from '../router/router';\r\nimport b1 from '../assets/img/banner1.jpg'\r\nimport b2 from '../assets/img/banner2.jpg'\r\nimport {getBook,getComments,isbn} from '../api/api.js'\r\nimport {Load} from '../components/load'\r\n// import install from './api/install';\r\nimport jsonp from 'jsonp'\r\nimport { Headers } from '../components/header'\r\n// import fetchJsonp from 'fetch-jsonp';\r\n\r\nimport { Book } from '../components/book'\r\nimport { RowLayout } from '../components/row'\r\nimport axios from 'axios' \r\nexport class Index extends Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n list:[],\r\n page:1,\r\n limit:20,\r\n flag:true,\r\n banner: [b1, b2]\r\n }\r\n }\r\n componentDidMount=()=>{\r\n this.getList()\r\n }\r\n getData = () => {\r\n var api = 'http://book.feelyou.top/isbn/9787506380263'\r\n }\r\n downs=()=>{\r\n axios.get('http://localhost:3000/book/api/exportexcel', { //downloadFiles interface request address\r\n responseType:'blob'\r\n }).then((rs) => {\r\n const blob = new Blob([rs.data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" })\r\n const fileName = \"All books available for borrowing on the site.xlsx\";\r\n if ('download' in document.createElement('a')) { // Non-IE download\r\n const elink = document.createElement('a');\r\n elink.download = fileName;\r\n elink.style.display = 'none';\r\n elink.href = URL.createObjectURL(blob);\r\n document.body.appendChild(elink);\r\n elink.click();\r\n URL.revokeObjectURL(elink.href);// Release the URL object\r\n document.body.removeChild(elink);\r\n }\r\n }).catch((error) => {\r\n console.log('File download failed', error);\r\n });\r\n }\r\n getList=()=>{\r\n getBook({\r\n limit:this.state.limit,\r\n page:this.state.page\r\n }).then(res=>{\r\n if(res.data.length>0){\r\n if(res.data.length<this.state.limit){\r\n this.setState({\r\n flag:false\r\n })\r\n }\r\n let page=this.state.page+1;\r\n let list=this.state.list.concat(res.data)\r\n this.setState({\r\n page,\r\n list\r\n })\r\n \r\n }\r\n else{\r\n this.setState({\r\n flag:false\r\n })\r\n }\r\n })\r\n }\r\n getMore=()=>{\r\n this.getList()\r\n }\r\n // Click to search\r\n getKeyWord = (e) => {\r\n console.log(e)\r\n }\r\n render() {\r\n return (\r\n <div>\r\n <div>\r\n <Headers index=\"1\" mes={()=>{console.log(666)}}></Headers>\r\n <RowLayout>\r\n <Carousel interval=\"5000\" height=\"500px\" arrow=\"always\">\r\n {\r\n this.state.banner.map((item, index) => {\r\n return (\r\n <Carousel.Item key={index}>\r\n <img className=\"banner-img\" src={item}></img>\r\n </Carousel.Item>\r\n )\r\n })\r\n }\r\n </Carousel>\r\n <div className=\"title\">The latest books\r\n <Button type=\"primary\" className=\"downBook\" onClick={this.downs}>Download all available books</Button>\r\n </div>\r\n <Book list={this.state.list}></Book>\r\n <Load status={this.state.flag} getMore={this.getMore}></Load>\r\n </RowLayout>\r\n </div>\r\n \r\n </div>\r\n )\r\n }\r\n // register\r\n register = () => {\r\n\r\n }\r\n login = () => {\r\n\r\n }\r\n changeRoute(path) {\r\n console.log(path)\r\n return path\r\n }\r\n inputChange = (e) => {\r\n this.setState({\r\n msg: e.target.value\r\n })\r\n }\r\n}\r\n","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\view\\search.js",[],"C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\view\\detail.js",["145"],"import React, { Component } from 'react'\r\n// import '../assets/css/book.css'\r\n// import {\r\n// Link\r\n// } from 'react-router-dom';\r\nimport { BookDetail } from '../components/detail'\r\nimport { SearchBook } from '../components/search'\r\nimport { Breadcrumb } from 'element-react';\r\nimport { Headers } from '../components/header'\r\nimport { getBookDetail } from '../api/api'\r\nexport class Details extends Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n msg: '',\r\n id:this.props.match.params.id,\r\n detail:{},\r\n user:{}\r\n }\r\n }\r\n componentDidMount=()=>{\r\n this.getDetail()\r\n }\r\n getDetail=()=>{\r\n getBookDetail({id:this.state.id}).then(res=>{\r\n this.setState({\r\n detail:res.data,\r\n user:res.data.user\r\n })\r\n })\r\n }\r\n // Click to search\r\n getKey = (e) => {\r\n console.log(e)\r\n }\r\n render() {\r\n return (\r\n <div>\r\n <Headers mes={()=>{console.log(666)}}></Headers>\r\n <SearchBook getKey={this.getKey}></SearchBook>\r\n <BookDetail detail={this.state.detail} user={this.state.user}></BookDetail>\r\n </div>\r\n )\r\n }\r\n}\r\n","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\view\\message.js",["146","147","148","149","150","151"],"import React, { Component } from 'react'\r\n// import '../assets/css/book.css'\r\nimport {\r\n Link, browserHistory\r\n} from 'react-router-dom';\r\nimport { Table, Button, Dialog, Form, Input,Notification} from 'element-react';\r\nimport { resloveLend } from '../api/api'\r\nexport class Infos extends Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n meslist: [],\r\n dialogVisible: false,\r\n form: {\r\n desc: ''\r\n },\r\n detail:{},\r\n user: JSON.parse(localStorage.getItem('userInfo')).user,\r\n columns: [\r\n {\r\n type: 'index'\r\n },\r\n {\r\n label: \"The title of the book\",\r\n prop: \"book_name\",\r\n align: 'center',\r\n width: 160,\r\n render: function (data) {\r\n return <span>{data.book_name}</span>\r\n }\r\n },\r\n {\r\n label: \"Book applicants\",\r\n prop: \"user\",\r\n align: 'center',\r\n width: 160,\r\n render: function (data) {\r\n return <span>{data.user.name}</span>\r\n }\r\n },\r\n {\r\n label: \"Mailing address\",\r\n prop: \"address\",\r\n align: 'center',\r\n render: function (data) {\r\n return <span>{data.address}</span>\r\n }\r\n },\r\n {\r\n label: \"Applicant's message\",\r\n prop: \"remask\",\r\n align: 'center',\r\n width: 160,\r\n render: function (data) {\r\n return <span>{data.lend_remark}</span>\r\n }\r\n },\r\n {\r\n label: \"My notes\",\r\n prop: \"lend_remark\",\r\n align: 'center',\r\n render: function (data) {\r\n return <span>{data.remask ? data.remark : 'Empty or no response'}</span>\r\n }\r\n },\r\n\r\n {\r\n label: \"Status\",\r\n prop: \"status\",\r\n align: 'center',\r\n render: function (data) {\r\n return <span>{data.status == 0 ? 'Pending review' : data.status == 1 ? 'examination passed' : 'Refuse to borrow books'}</span>\r\n }\r\n },\r\n {\r\n label: \"operating\",\r\n prop: \"address\",\r\n align: 'center',\r\n fixed: 'right',\r\n width: 260,\r\n render: (data) => {\r\n let html;\r\n if (data.status == 0) {\r\n html = (\r\n <Button type=\"primary\" onClick={this.showDetail.bind(this, data)} size=\"small\">Approval</Button>\r\n )\r\n } else {\r\n <Button plain={true} type=\"info\" size=\"small\">Processed</Button>\r\n }\r\n return (\r\n <span>\r\n {html}\r\n </span>\r\n )\r\n }\r\n }\r\n ],\r\n }\r\n }\r\n componentDidMount = () => {\r\n\r\n }\r\n showDetail = (e) => {\r\n this.setState({\r\n detail:e,\r\n dialogVisible: true\r\n })\r\n }\r\n\r\n onSubmit(e) {\r\n e.preventDefault();\r\n }\r\n\r\n onChange(key, value) {\r\n this.state.form[key] = value;\r\n this.forceUpdate();\r\n }\r\n submit = () => {\r\n let data={\r\n status:5,\r\n book_id:this.state.detail.book_id,\r\n statusId:1,\r\n remark:this.state.form.desc\r\n }\r\n this.resloveLend(data)\r\n this.props.getLend()\r\n }\r\n refusLend=()=>{\r\n let data={\r\n status:2,\r\n book_id:this.state.detail.book_id,\r\n statusId:2,\r\n remark:this.state.form.desc\r\n }\r\n this.resloveLend(data)\r\n \r\n }\r\n resloveLend=(data)=>{\r\n resloveLend(data).then(res=>{\r\n this.setState({\r\n dialogVisible:false\r\n })\r\n Notification({\r\n title: 'successful',\r\n message: 'The processing is successful, please refresh the page',\r\n type: 'success'\r\n });\r\n })\r\n }\r\n render() {\r\n return (\r\n <div>\r\n <div>\r\n <Table\r\n style={{ width: '100%' }}\r\n columns={this.state.columns}\r\n data={this.props.myLends}\r\n border={true}\r\n height=\"70vh\"\r\n highlightCurrentRow={true}\r\n onCurrentChange={item => { console.log(item) }}\r\n />\r\n <Dialog\r\n title='Approve the application'\r\n size=\"small\"\r\n visible={this.state.dialogVisible}\r\n onCancel={() => this.setState({ dialogVisible: false })}\r\n lockScroll={false}\r\n >\r\n <Dialog.Body>\r\n <Form model={this.state.form} labelWidth=\"80\" onSubmit={this.onSubmit.bind(this)}>\r\n <Form.Item label=\"notes\">\r\n <Input type=\"textarea\" placeholder=\"Please enter a note\" value={this.state.form.desc} onChange={this.onChange.bind(this, 'desc')}></Input>\r\n <div className=\"tips\">Reminder: Enter the reason for refusing to lend or remarks; enter the postage payment method, contact information, book return items, etc</div>\r\n </Form.Item>\r\n </Form>\r\n </Dialog.Body>\r\n <Dialog.Footer className=\"dialog-footer\">\r\n <Button type=\"primary\" onClick={this.submit}>Agree to lend</Button>\r\n <Button type=\"danger\" onClick={this.refusLend}>Refuse to lend</Button>\r\n <Button onClick={() => this.setState({ dialogVisible: false })}>shut down</Button>\r\n </Dialog.Footer>\r\n </Dialog>\r\n </div>\r\n </div>\r\n )\r\n }\r\n}\r\n","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\api\\api.js",[],"C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\view\\myLend.js",["152","153","154","155","156"],"import React, { Component } from 'react'\r\n// import '../assets/css/book.css'\r\n// import {\r\n// Link\r\n// } from 'react-router-dom';\r\nimport { Table, Button,Dialog,Form,MessageBox,Message } from 'element-react';\r\nimport { mylend ,backBook} from '../api/api'\r\nexport class Mylend extends Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n list: [],\r\n detail:{\r\n book_name:'',\r\n name:'',\r\n address:'',\r\n tell:'',\r\n user:{\r\n name:''\r\n }\r\n },\r\n dialogVisible:false,\r\n user: JSON.parse(localStorage.getItem('userInfo')).user,\r\n columns: [\r\n {\r\n type: 'index'\r\n },\r\n {\r\n label: \"Book name\",\r\n prop: \"book_name\",\r\n align: 'center',\r\n width: 160,\r\n render: function (data) {\r\n return <span>{data.book_name}</span>\r\n }\r\n },\r\n {\r\n label: \"Book owner\",\r\n prop: \"user\",\r\n align: 'center',\r\n width: 160,\r\n render: function (data) {\r\n return <span>{data.user.name}</span>\r\n }\r\n },\r\n {\r\n label: \"Notes from the book owner\",\r\n prop: \"remask\",\r\n align: 'center',\r\n width: 160,\r\n render: function (data) {\r\n return <span>{data.remask}</span>\r\n }\r\n },\r\n {\r\n label: \"My notes\",\r\n prop: \"lend_remark\",\r\n align: 'center',\r\n render: function (data) {\r\n return <span>{data.lend_remark}</span>\r\n }\r\n },\r\n {\r\n label: \"Mailing address\",\r\n prop: \"address\",\r\n align: 'center',\r\n render: function (data) {\r\n return <span>{data.address}</span>\r\n }\r\n },\r\n {\r\n label: \"Status\",\r\n prop: \"status\",\r\n align: 'center',\r\n render: function (data) {\r\n return <span>{data.status == 0 ? 'with for approve' : data.status == 1 ? 'examination passed' : 'Refuse to lend books'}</span>\r\n }\r\n },\r\n {\r\n label: \"operating\",\r\n prop: \"address\",\r\n align: 'center',\r\n fixed: 'right',\r\n width: 260,\r\n render: (data) => {\r\n let btn;\r\n if(data.isback==1){\r\n btn=( <Button type=\"primary\" plain size=\"small\">Has been returned</Button>)\r\n }\r\n else{\r\n btn=(\r\n<Button type=\"primary\" onClick={this.backBooks.bind(this,data)} size=\"small\">Confirm the return</Button>\r\n )\r\n }\r\n return (\r\n <span>\r\n <Button plain={true} type=\"info\" onClick={this.showDetail.bind(this, data)} size=\"small\">see details</Button>\r\n {btn}\r\n </span>\r\n )\r\n }\r\n }\r\n ],\r\n }\r\n }\r\n componentDidMount = () => {\r\n this.getDetail()\r\n }\r\n getDetail = () => {\r\n mylend({ lend_userId: this.state.user.id }).then(res => {\r\n this.setState({\r\n list: res.data\r\n })\r\n })\r\n }\r\n backBooks=(e)=>{\r\n MessageBox.confirm('Confirm return book?', 'prompt', {\r\n type: 'warning'\r\n }).then(() => {\r\n backBook({book_id:e.book_id}).then(res=>{\r\n if(res.data[0]==1){\r\n Message({\r\n type: 'success',\r\n message: 'Successfully initiated the book return!'\r\n }); \r\n }\r\n this.getDetail()\r\n })\r\n \r\n }).catch(() => {\r\n Message({\r\n type: 'info',\r\n message: 'Cancelled'\r\n });\r\n });\r\n \r\n }\r\n showDetail=(e)=>{\r\n console.log(e)\r\n this.setState({\r\n detail:e,\r\n dialogVisible:true\r\n })\r\n }\r\n\r\n onSubmit(e) {\r\n e.preventDefault();\r\n }\r\n onChange(key, value) {\r\n console.log(key, value)\r\n this.state.form[key] = value;\r\n this.forceUpdate();\r\n }\r\n render() {\r\n return (\r\n <div>\r\n <div>\r\n\r\n <Table\r\n style={{ width: '100%' }}\r\n columns={this.state.columns}\r\n data={this.state.list}\r\n border={true}\r\n height=\"70vh\"\r\n highlightCurrentRow={true}\r\n onCurrentChange={item => { console.log(item) }}\r\n />\r\n </div>\r\n <Dialog\r\n title='Approve the application'\r\n size=\"small\"\r\n visible={this.state.dialogVisible}\r\n onCancel={() => this.setState({ dialogVisible: false })}\r\n lockScroll={false}\r\n >\r\n <Dialog.Body>\r\n <Form model={this.state.form} labelWidth=\"110\" onSubmit={this.onSubmit.bind(this)}>\r\n <Form.Item label=\"Title:\">\r\n {this.state.detail.book_name}\r\n </Form.Item>\r\n <Form.Item label=\"application time:\">\r\n {this.state.detail.apply_time}\r\n </Form.Item>\r\n <Form.Item label=\"phone:\">\r\n {this.state.detail.tell}\r\n </Form.Item>\r\n <Form.Item label=\"Mailing address:\">\r\n {this.state.detail.address}\r\n </Form.Item>\r\n <Form.Item label=\"The name of the approver\">\r\n {this.state.detail.user.name}\r\n </Form.Item>\r\n <Form.Item label=\"Processing time\">\r\n {this.state.detail.review_time||'Not approved'}\r\n </Form.Item>\r\n <Form.Item label=\"notes of the approver:\">\r\n {this.state.detail.remask||'-'}\r\n </Form.Item>\r\n \r\n </Form>\r\n </Dialog.Body>\r\n <Dialog.Footer className=\"dialog-footer\">\r\n <Button onClick={() => this.setState({ dialogVisible: false })}>shut down</Button>\r\n </Dialog.Footer>\r\n </Dialog>\r\n </div>\r\n )\r\n }\r\n}\r\n","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\view\\address.js",["157","158","159","160"],"import React, { Component } from 'react'\r\nimport { Button } from 'antd';\r\n\r\nimport {Notification,Dialog,Form,Input,Radio} from 'element-react'\r\nimport { getUserAddress,deleteAddress,setAddress,addAddress} from '../api/api'\r\nimport 'antd/dist/antd.css';\r\nimport '../assets/css/address.css'\r\nexport class Address extends Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n list: [],\r\n type:true,\r\n sex:1,\r\n userInfo:JSON.parse(localStorage.getItem('userInfo')).user,\r\n dialogVisible:false,\r\n form:{\r\n name:'',\r\n phone:'',\r\n about:'',\r\n sex:1\r\n }\r\n }\r\n }\r\n componentDidMount = () => {\r\n this.getList()\r\n }\r\n onChanges(value) {\r\n this.setState({ \r\n sex:value\r\n });\r\n this.state.form.sex = value;\r\n\r\n }\r\n getList() {\r\n let user = JSON.parse(localStorage.getItem('userInfo'))\r\n getUserAddress({\r\n userID: user.user.id\r\n }).then(res => {\r\n console.log(res)\r\n this.setState({\r\n list: res.data\r\n })\r\n })\r\n }\r\n deleteAddress=(e)=>{\r\n let id=e.id;\r\n deleteAddress({id}).then(res=>{\r\n if(res.data==1){\r\n Notification({\r\n title: 'successful',\r\n message: 'successfully deleted',\r\n type: 'success'\r\n });\r\n this.getList()\r\n }\r\n })\r\n }\r\n insertAddress=()=>{\r\n this.setState({ dialogVisible: true ,type:true,form:{\r\n name:'',\r\n phone:'',\r\n about:''\r\n }})\r\n }\r\n // edit button\r\n edit=(e)=>{\r\n this.setState({\r\n form:Object.assign({},e),\r\n sex:e.sex+''\r\n })\r\n console.log(this.state.sex)\r\n this.setState({ dialogVisible: true ,type:false})\r\n }\r\n // Confirm to submit edit or add\r\n submit=()=>{\r\n let temp={\r\n data:{}\r\n };\r\n temp.data=Object.assign({},this.state.form)\r\n temp.userID=this.state.userInfo.id;\r\n if(this.state.type){\r\n // Add to\r\n addAddress(temp).then(res=>{\r\n if(res){\r\n Notification({\r\n title: 'successful',\r\n message: 'Add successful',\r\n type: 'success'\r\n });\r\n }\r\n this.setState({ dialogVisible: false})\r\n this.getList()\r\n })\r\n }else{\r\n temp.id= temp.data.id;\r\n // edit\r\n setAddress(temp).then(res=>{\r\n if(res){\r\n Notification({\r\n title: 'successful',\r\n message: 'Edit successful',\r\n type: 'success'\r\n });\r\n this.setState({ dialogVisible: false})\r\n this.getList()\r\n }\r\n })\r\n }\r\n }\r\n onSubmit(e) {\r\n e.preventDefault();\r\n }\r\n // Update the value of the form\r\n onChange(key, value) {\r\n console.log(key, value)\r\n this.state.form[key] = value;\r\n this.forceUpdate();\r\n }\r\n render() {\r\n return (\r\n <div>\r\n <Button onClick={this.insertAddress}>Add address</Button>\r\n <div className=\"address-list\">\r\n {\r\n this.state.list.map((item, index) => {\r\n return (\r\n <div className=\"address-list-item flex-row\">\r\n <div>\r\n <div className=\"address-list-name\">\r\n <span>{item.name}</span>&nbsp;&nbsp;&nbsp;\r\n <span>{item.phone}</span>&nbsp;&nbsp;\r\n <span>{item.sex == 1 ? 'male' : 'famale'}</span>\r\n </div>\r\n <div className=\"address-list-detail\">\r\n {item.about}\r\n </div>\r\n </div>\r\n <div className=\"right-btn\">\r\n <Button className=\"address-edit\" onClick={this.edit.bind(this,item)}>Edit</Button>\r\n <Button danger onClick={this.deleteAddress.bind(this,item)}>Delete</Button>\r\n </div>\r\n </div>\r\n )\r\n })\r\n }\r\n </div>\r\n <Dialog\r\n title={this.state.type ? 'Add address' : 'Edit the address'}\r\n size=\"small\"\r\n visible={this.state.dialogVisible}\r\n onCancel={() => this.setState({ dialogVisible: false })}\r\n lockScroll={false}\r\n >\r\n <Dialog.Body>\r\n <Form model={this.state.form} labelWidth=\"80\" onSubmit={this.onSubmit.bind(this)}>\r\n <Form.Item label=\"Name\">\r\n <Input value={this.state.form.name} onChange={this.onChange.bind(this, 'name')}></Input>\r\n </Form.Item>\r\n <Form.Item label=\"Phone number\">\r\n <Input value={this.state.form.phone} onChange={this.onChange.bind(this, 'phone')}></Input>\r\n </Form.Item>\r\n <Form.Item label=\"gender\">\r\n <Radio value=\"1\" checked={this.state.sex === '1'} onChange={this.onChanges.bind(this)}>male</Radio>\r\n <Radio value=\"2\" checked={this.state.sex === '2'} onChange={this.onChanges.bind(this)}>famale</Radio>\r\n </Form.Item>\r\n <Form.Item label=\"detailed address\">\r\n <Input type=\"textarea\" value={this.state.form.about} onChange={this.onChange.bind(this, 'about')}></Input>\r\n </Form.Item>\r\n </Form>\r\n </Dialog.Body>\r\n <Dialog.Footer className=\"dialog-footer\">\r\n <Button onClick={() => this.setState({ dialogVisible: false })}>cancel</Button>\r\n <Button type=\"primary\" onClick={this.submit}>determine</Button>\r\n </Dialog.Footer>\r\n </Dialog>\r\n </div>\r\n )\r\n }\r\n}","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\view\\lendBook.js",["161","162","163","164","165","166"],"import React, { Component } from 'react'\r\n// import '../assets/css/book.css'\r\nimport {\r\n Link, browserHistory\r\n} from 'react-router-dom';\r\nimport { Table, Button, Dialog, Form, Input } from 'element-react';\r\nimport { getlendBook } from '../api/api'\r\nexport class MyLendBook extends Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n list: [],\r\n detail:{},\r\n user: JSON.parse(localStorage.getItem('userInfo')).user,\r\n columns: [\r\n {\r\n type: 'index'\r\n },\r\n {\r\n label: \"The title of the book\",\r\n prop: \"book_name\",\r\n align: 'center',\r\n width: 160,\r\n render: function (data) {\r\n return <span>{data.book_name}</span>\r\n }\r\n },\r\n {\r\n label: \"Book applicants\",\r\n prop: \"user\",\r\n align: 'center',\r\n width: 160,\r\n render: function (data) {\r\n return <span>{data.name}</span>\r\n }\r\n },\r\n {\r\n label: \"telephone number\",\r\n prop: \"user\",\r\n align: 'center',\r\n width: 160,\r\n render: function (data) {\r\n return <span>{data.tell}</span>\r\n }\r\n },\r\n {\r\n label: \"Mailing address\",\r\n prop: \"address\",\r\n align: 'center',\r\n render: function (data) {\r\n return <span>{data.address}</span>\r\n }\r\n },\r\n {\r\n label: \"Applicant's message\",\r\n prop: \"remask\",\r\n align: 'center',\r\n width: 160,\r\n render: function (data) {\r\n return <span>{data.lend_remark}</span>\r\n }\r\n },\r\n {\r\n label: \"My notes\",\r\n prop: \"lend_remark\",\r\n align: 'center',\r\n render: function (data) {\r\n return <span>{data.remask ? data.remark : '-'}</span>\r\n }\r\n },\r\n {\r\n label: \"The loan date\",\r\n prop: \"lend_remark\",\r\n align: 'center',\r\n render: function (data) {\r\n return <span>{data.review_time}</span>\r\n }\r\n },\r\n {\r\n label: \"Return date\",\r\n prop: \"lend_remark\",\r\n align: 'center',\r\n render: function (data) {\r\n return <span>{data.back_time||'-'}</span>\r\n }\r\n },\r\n {\r\n label: \"status\",\r\n prop: \"lend_remark\",\r\n align: 'center',\r\n render: function (data) {\r\n let btn;\r\n if(data.isback==1){\r\n btn=(<Button>Book has been returned</Button>)\r\n }else{\r\n btn=(\r\n <Button>Not returned</Button>\r\n )\r\n }\r\n return <span>{btn}</span>\r\n }\r\n },\r\n ],\r\n }\r\n }\r\n componentDidMount = () => {\r\n getlendBook({uid:this.state.user.id}).then(e=>{\r\n this.setState({\r\n list:e.data\r\n })\r\n })\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n <div>\r\n <Table\r\n style={{ width: '100%' }}\r\n columns={this.state.columns}\r\n data={this.state.list}\r\n border={true}\r\n height=\"70vh\"\r\n highlightCurrentRow={true}\r\n onCurrentChange={item => { console.log(item) }}\r\n />\r\n </div>\r\n </div>\r\n )\r\n }\r\n}\r\n","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\view\\mesMgr.js",["167","168","169"],"import React, { Component } from 'react'\r\n// import '../assets/css/book.css'\r\n// import {\r\n// Link\r\n// } from 'react-router-dom';\r\n\r\nimport { Breadcrumb, Tag, Button, Table } from 'element-react';\r\n\r\n\r\nexport class MgrMes extends Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n uid: JSON.parse(localStorage.getItem('userInfo')).user.id,\r\n columns: [\r\n {\r\n type: 'index'\r\n },\r\n {\r\n label: \"Types of\",\r\n prop: \"status\",\r\n align: 'center',\r\n width: 100,\r\n render: function (e) {\r\n var btn;\r\n if (e.user_id === JSON.parse(localStorage.getItem('userInfo')).user.id) {\r\n btn = (\r\n <Tag type=\"danger\">Borrowing application</Tag>\r\n )\r\n } else {\r\n btn = (\r\n <Tag type=\"primary\">My application</Tag>\r\n )\r\n }\r\n return <span>{btn}</span>\r\n }\r\n },\r\n {\r\n label: \"The name of the book\",\r\n prop: \"book_name\",\r\n align: 'center',\r\n width: 160,\r\n render: function (data) {\r\n return <span>{data.book_name}</span>\r\n }\r\n },\r\n {\r\n label: \"Applicant's notes\",\r\n prop: \"lend_remark\",\r\n align: 'center',\r\n width: 160,\r\n render: function (data) {\r\n return <span>{data.lend_remark}</span>\r\n }\r\n },\r\n {\r\n label: \"Approver notes\",\r\n prop: \"remask\",\r\n align: 'center',\r\n width: 160,\r\n render: function (data) {\r\n return <span>{data.remask}</span>\r\n }\r\n },\r\n {\r\n label: \"application time\",\r\n prop: \"apply_time\",\r\n align: 'center',\r\n width: 160,\r\n render: function (data) {\r\n return <span>{data.apply_time}</span>\r\n }\r\n },\r\n {\r\n label: \"Application time\",\r\n prop: \"review_time\",\r\n align: 'center',\r\n width: 160,\r\n render: function (data) {\r\n return <span>{data.review_time}</span>\r\n }\r\n },\r\n {\r\n label: \"applicant\",\r\n prop: \"address\",\r\n align: 'center',\r\n render: function (data) {\r\n let content;\r\n if (data.lend_userId === JSON.parse(localStorage.getItem('userInfo')).user.id) {\r\n content = '-'\r\n } else {\r\n content = data.name\r\n }\r\n return <span>{content}</span>\r\n }\r\n },\r\n {\r\n label: \"Approver\",\r\n prop: \"status\",\r\n align: 'center',\r\n render: function (data) {\r\n let content;\r\n if (data.user_id === JSON.parse(localStorage.getItem('userInfo')).user.id) {\r\n content = '-'\r\n } else {\r\n content = data.user.name\r\n }\r\n return <span>{content}</span>\r\n }\r\n },\r\n {\r\n label: \"Status\",\r\n prop: \"status\",\r\n align: 'center',\r\n render: function (data) {\r\n return <span>{data.status == 0 ? 'Pending review' : data.status == 1 ? 'examination passed' : 'Refuse to borrow books'}</span>\r\n }\r\n },\r\n {\r\n label: \"operating\",\r\n prop: \"address\",\r\n align: 'center',\r\n fixed: 'right',\r\n width: 260,\r\n render: (data) => {\r\n let content;\r\n if (data.user_id === JSON.parse(localStorage.getItem('userInfo')).user.id) {\r\n content = (\r\n <Button type=\"primary\" onClick={this.toReview.bind(this, data)} size=\"small\">Go for approval</Button>\r\n )\r\n } else {\r\n content = ( <Button plain={true} type=\"info\" onClick={this.showDetail.bind(this, data)} size=\"small\">View application</Button>)\r\n }\r\n return (\r\n <span>\r\n {content}\r\n </span>\r\n )\r\n }\r\n }\r\n ],\r\n }\r\n }\r\n componentDidMount = () => {\r\n\r\n }\r\n showDetail = (e) => {\r\n console.log(e)\r\n this.props.changeTab('2')\r\n\r\n }\r\n toReview=()=>{\r\n this.props.changeTab('mes')\r\n }\r\n render() {\r\n return (\r\n <div>\r\n <Table\r\n style={{ width: '100%' }}\r\n columns={this.state.columns}\r\n data={this.props.allMes}\r\n border={true}\r\n height=\"70vh\"\r\n highlightCurrentRow={true}\r\n onCurrentChange={item => { console.log(item) }}\r\n />\r\n </div>\r\n )\r\n }\r\n}\r\n","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\components\\load.js",[],"C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\components\\book.js",["170","171","172"],"import React, { Component } from 'react'\r\nimport '../assets/css/book.css'\r\nimport img from '../assets/img.jpg'\r\nimport {\r\n Link\r\n} from 'react-router-dom';\r\n\r\n\r\nimport { Layout, Card,Breadcrumb } from 'element-react';\r\nimport { BOOLEAN_BINARY_OPERATORS } from '@babel/types';\r\nexport class Book extends Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n msg: '',\r\n \r\n }\r\n }\r\n render() {\r\n let bookList;\r\n if(this.props.list.length>0){\r\n bookList=(\r\n this.props.list.map((item) => {\r\n return (\r\n <Link to={'/Details/'+item.id}>\r\n <div className=\"book-list-item\">\r\n <Card bodyStyle={{ padding: 0 }}>\r\n <img src={'http://localhost:3000'+item.img_url} alt=\"Failed to load\" className=\"book-img\" />\r\n <div style={{ padding: 14 }}>\r\n <span>{item.book_name}</span>\r\n <div className=\"bottom clearfix\">\r\n <time className=\"time\">author:{item.author}</time>\r\n {/* <Button type=\"text\" className=\"button\">Operation button</Button> */}\r\n </div>\r\n </div>\r\n </Card>\r\n </div>\r\n </Link>\r\n )\r\n })\r\n )\r\n }\r\n return (\r\n <div className=\"container\">\r\n <div className=\"book\">\r\n <div className=\"book-list\">\r\n {\r\n bookList\r\n }\r\n <i className=\"null\"></i>\r\n <i className=\"null\"></i>\r\n <i className=\"null\"></i> \r\n <i className=\"null\"></i>\r\n <i className=\"null\"></i>\r\n <i className=\"null\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n )\r\n }\r\n\r\n inputChange = (e) => {\r\n this.setState({\r\n msg: e.target.value\r\n })\r\n }\r\n}\r\n","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\components\\search.js",[],"C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\components\\header.js",["173","174"],"import React, { Component } from 'react'\r\nimport { Menu, MessageBox, Button } from 'element-react';\r\nimport './header.css'\r\nimport {\r\n browserHistory,\r\n Link\r\n} from 'react-router-dom';\r\n\r\nimport { getmessage } from '../api/api'\r\nimport { SearchInput } from './searchInput'\r\nexport class Headers extends Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n meslist: [],\r\n flag:false\r\n }\r\n }\r\n componentDidMount = () => {\r\n if(localStorage.getItem('userInfo')){\r\n let user = JSON.parse(localStorage.getItem('userInfo')).user;\r\n getmessage({ uid: user.id }).then(res => {\r\n this.setState({\r\n meslist: res.data.a.concat(res.data.b)\r\n })\r\n })\r\n }\r\n }\r\n toMes=()=>{\r\n // this.props.history.push({pathname: '/'})\r\n this.props.mes()\r\n }\r\n getKeyWord=()=>{\r\n\r\n }\r\n logouts(e){\r\n e.stopPropagation()\r\n localStorage.clear()\r\n this.forceUpdate();\r\n }\r\n outLog=()=>{\r\n \r\n this.setState({\r\n flag:true\r\n })\r\n }\r\n onSelect = (e) => {\r\n\r\n }\r\n closebgm(e){\r\n // stoppropagation()\r\n e.stopPropagation()\r\n this.setState({\r\n flag:false\r\n })\r\n }\r\n render() {\r\n let user = localStorage.getItem('userInfo'), html,logout;\r\n if(this.state.flag){\r\n logout=(\r\n <div className=\"showout\" onClick={this.closebgm.bind(this)}> <Link to=\"/\"><Button className=\"showout-btn\" onClick={this.logouts.bind(this)}>sign out</Button></Link></div>\r\n )\r\n }else{\r\n logout=(<div></div>)\r\n }\r\n if (user) {\r\n let info = JSON.parse(user)\r\n html = (\r\n <span>\r\n <span className=\"log\" onClick={this.toMes}>\r\n <Link to='/About/5' className=\"flex-row\">\r\n <svg t=\"1608539531946\" class=\"icon-mes\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"1223\" width=\"35\" height=\"35\"><path d=\"M799.9 681.3c7-0.2 14 1.2 20.7 5.6-24.3-15.6-40.3-42.8-40.3-73.9V439.5c0-127.1-91.9-233.2-214.7-259.3V174c0-32.4-26.2-58.5-58.5-58.5s-58.5 26.2-58.5 58.5v6.2c-122.8 26.1-214.7 132.1-214.7 259.3V613c0 31.1-16.1 58.3-40.3 73.9 6.8-4.4 13.7-5.9 20.7-5.6-21.5 0.1-38.9 17.4-38.9 39s17.4 39 39 39h585.3c21.6 0 39-17.4 39-39 0.1-21.4-17.3-38.9-38.8-39zM507.2 896c53.9 0 97.6-43.7 97.6-97.6H409.6c0 53.9 43.6 97.6 97.6 97.6z\" p-id=\"1224\" fill=\"#ffffff\"></path></svg>\r\n <div className=\"mes-num\">\r\n {this.state.meslist.length}\r\n </div>\r\n </Link>\r\n &nbsp;&nbsp;&nbsp; </span>\r\n <span className=\"reg\" onClick={this.outLog}>\r\n {info.user.name}</span>\r\n {logout}\r\n </span>\r\n )\r\n } else {\r\n html = (\r\n <span>\r\n <span className=\"log\">\r\n <Link to={this.changeRoute('/login')}>log in</Link> &nbsp;&nbsp;&nbsp;| </span>\r\n <span className=\"reg\">\r\n <Link to={this.changeRoute('/login')}>registered</Link></span>\r\n </span>\r\n )\r\n }\r\n return (\r\n <div>\r\n <div className=\"el-menu-demo\">\r\n <Menu theme=\"dark\" defaultActive={this.props.index} mode=\"horizontal\" onSelect={this.onSelect.bind(this)}>\r\n <Link to={this.changeRoute('/')}> <Menu.Item index=\"1\" className=\"name\">Home page</Menu.Item></Link>\r\n <Link to={this.changeRoute('/About/1')}> <Menu.Item index=\"3\" className=\"mybook\">Personal center</Menu.Item></Link>\r\n <div className=\"search-inputs\">\r\n <SearchInput parentFn={this.getKeyWord}></SearchInput>\r\n </div>\r\n <div className=\"login-text\">\r\n {html}\r\n </div>\r\n </Menu>\r\n </div>\r\n <div className=\"h60\"></div>\r\n </div>\r\n )\r\n }\r\n\r\n changeRoute(path) {\r\n // if(path=='/About'&&!localStorage.getItem('userInfo')){\r\n // MessageBox.confirm('You have not logged in yet, do you want to log in?','Prompt', {\r\n // type: 'warning'\r\n // }).then(() => {\r\n\r\n // }).catch(() => {\r\n\r\n // });\r\n // }\r\n return path\r\n }\r\n}\r\n","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\components\\detail.js",["175","176","177","178","179","180"],"import React, { Component } from 'react'\r\nimport {\r\n Link\r\n} from 'react-router-dom';\r\nimport { RowLayout } from './row'\r\nimport img from '../assets/img.jpg'\r\nimport { Card, Button, Breadcrumb,Radio, Dialog,MessageBox, Form, Input, Notification, Select } from 'element-react';\r\nimport '../assets/css/detail.css';\r\nimport { addOrders, getUserAddress } from '../api/api'\r\nexport class BookDetail extends Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n form: {\r\n name: '',\r\n tell: '',\r\n sex: 1,\r\n address: '',\r\n lend_remark: ''\r\n },\r\n sex:1,\r\n addressList: [],\r\n dialogVisible: false\r\n }\r\n }\r\n componentDidMount = () => {\r\n \r\n }\r\n lendBook = () => {\r\n let user = localStorage.getItem('userInfo')\r\n if(!user){\r\n MessageBox.confirm('You have not logged in yet, please log in first?', 'prompt', {\r\n cancelButtonText: 'return',\r\n confirmButtonText: 'determine',\r\n type: 'warning'\r\n }).then(() => {\r\n \r\n }).catch(() => {\r\n \r\n });\r\n return\r\n }\r\n this.getList()\r\n this.setState({\r\n dialogVisible: true\r\n })\r\n }\r\n getList() {\r\n let user = JSON.parse(localStorage.getItem('userInfo'))\r\n getUserAddress({\r\n userID: user.user.id\r\n }).then(res => {\r\n console.log(res)\r\n this.setState({\r\n addressList: res.data\r\n })\r\n })\r\n }\r\n submit = () => {\r\n if( JSON.parse(localStorage.getItem('userInfo')).user.id==this.props.detail.user_id){\r\n Notification({\r\n title: 'caveat',\r\n message: 'You can not borrow books published by yourself',\r\n type: 'warning'\r\n });\r\n return\r\n }\r\n let temp = Object.assign({}, this.state.form),\r\n user = this.props.detail;\r\n temp.user_id = user.user_id;\r\n temp.book_name = user.book_name;\r\n temp.lend_userId = JSON.parse(localStorage.getItem('userInfo')).user.id;\r\n temp.book_id = user.id;\r\n temp.status = 0;\r\n addOrders(temp).then(res => {\r\n if (res) {\r\n Notification({\r\n title: 'successful',\r\n message: 'The submission is successful and will be approved by the book owner',\r\n type: 'success'\r\n });\r\n this.setState({\r\n dialogVisible: false\r\n })\r\n }\r\n })\r\n }\r\n selectChange=(e)=>{\r\n this.state.form.address = e;\r\n console.log(e)\r\n }\r\n onSubmit(e) {\r\n e.preventDefault();\r\n }\r\n onChanges(value) {\r\n this.setState({ \r\n sex:value\r\n });\r\n this.state.form.sex = value;\r\n\r\n }\r\n // Update the value of the form\r\n onChange(key, value) {\r\n this.state.form[key] = value;\r\n this.forceUpdate();\r\n }\r\n render() {\r\n let btn;\r\n if (this.props.detail.status == 2) {\r\n btn = (<Button type=\"danger\" className=\"h30\" onClick={this.lendBook}>Borrow</Button>)\r\n } else {\r\n btn = (<Button type=\"primary\" plain className=\"h30\" >The book has been locked by another user</Button>)\r\n }\r\n return (\r\n <div>\r\n <RowLayout>\r\n <div className=\"breadcrumbs\"> <Breadcrumb separator=\"/\">\r\n <Breadcrumb.Item>Home page</Breadcrumb.Item>\r\n <Breadcrumb.Item>Book details</Breadcrumb.Item>\r\n <Breadcrumb.Item>{this.props.detail.book_name}</Breadcrumb.Item>\r\n </Breadcrumb></div>\r\n <Card\r\n className=\"box-card\"\r\n header={\r\n <div className=\"clearfix\">\r\n <span style={{ \"lineHeight\": \"25px\" }}>Book details</span>\r\n <span style={{ \"float\": \"right\" }}>\r\n <Link to='/'> <Button type=\"primary\" size=\"small\" plain>return</Button></Link>\r\n </span>\r\n </div>\r\n }\r\n >\r\n <div className=\"book-detail\">\r\n <div className=\"detail-book-info\">\r\n <div>\r\n <img className=\"detail-book-img\" alt=\"Failed to load\" src={'http://localhost:3000' + this.props.detail.img_url}></img>\r\n </div>\r\n <div className=\"detail-info\">\r\n <div>Book name:{this.props.detail.book_name}</div>\r\n <div>Book author:{this.props.detail.author}</div>\r\n <div>Publishing house:{this.props.detail.author}</div>\r\n <div>ISBN:{this.props.detail.ISBN}</div>\r\n <div className=\"details\">\r\n Book introduction:{this.props.detail.desc}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"flex-row\">\r\n <div className=\"flex-row avatar-info\">\r\n <img className=\"avatar\" src={this.props.user.avatar}></img>\r\n <span>{this.props.user.name}</span>\r\n <span className=\"ml10 fs14\">upload</span>\r\n </div>\r\n\r\n <div className=\"lend-btn\">{btn}</div>\r\n </div>\r\n </Card>\r\n </RowLayout>\r\n <Dialog\r\n title={this.state.type ? 'Add address' : 'Edit the address'}\r\n size=\"small\"\r\n visible={this.state.dialogVisible}\r\n onCancel={() => this.setState({ dialogVisible: false })}\r\n lockScroll={false}\r\n >\r\n <Dialog.Body>\r\n <Form model={this.state.form} labelWidth=\"80\" onSubmit={this.onSubmit.bind(this)}>\r\n <Form.Item label=\"Name\">\r\n <Input value={this.state.form.name} placeholder=\"Please type in your name\" onChange={this.onChange.bind(this, 'name')}></Input>\r\n </Form.Item>\r\n <Form.Item label=\"phone number\">\r\n <Input value={this.state.form.tell} placeholder=\"Please enter phone number\" onChange={this.onChange.bind(this, 'tell')}></Input>\r\n </Form.Item>\r\n <Form.Item label=\"gender\">\r\n {/* <Input value={this.state.form.sex} onChange={this.onChange.bind(this, 'sex')}></Input> */}\r\n <Radio value=\"1\" checked={this.state.sex === 1} onChange={this.onChanges.bind(this)}>male</Radio>\r\n <Radio value=\"2\" checked={this.state.sex === 2} onChange={this.onChanges.bind(this)}>famale</Radio>\r\n </Form.Item>\r\n <Form.Item label=\"Mailing address\">\r\n <div className=\"flex-row\">\r\n <Select value={this.state.form.address} onChange={this.selectChange.bind(this)} className=\"w100\" placeholder=\"please choose\">\r\n {\r\n this.state.addressList.map(el => {\r\n return (<Select.Option key={el.about} label={el.name+' '+el.about+' '+el.phone} value={el.about} />)\r\n })\r\n }\r\n </Select>\r\n <Link to=\"/About/3\"><Button>Add address</Button></Link>\r\n </div>\r\n </Form.Item>\r\n <Form.Item label=\"Instructions for borrowing books\">\r\n <Input type=\"textarea\" placeholder=\"Please enter the borrowing instructions\" value={this.state.form.lend_remark} onChange={this.onChange.bind(this, 'lend_remark')}></Input>\r\n </Form.Item>\r\n </Form>\r\n </Dialog.Body>\r\n <Dialog.Footer className=\"dialog-footer\">\r\n <Button onClick={() => this.setState({ dialogVisible: false })}>cancel</Button>\r\n <Button type=\"primary\" onClick={this.submit}>determine</Button>\r\n </Dialog.Footer>\r\n </Dialog>\r\n </div>\r\n )\r\n }\r\n\r\n inputChange = (e) => {\r\n this.setState({\r\n msg: e.target.value\r\n })\r\n }\r\n}\r\n","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\components\\row.js",[],"C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\api\\index.js",["181"],"import axios from './request'\r\n\r\nlet Axios = axios()\r\n\r\nexport default {\r\n get (url, params, headers) {\r\n let options = {}\r\n if (params) {\r\n options.params = params\r\n }\r\n if (headers) {\r\n options.headers = headers\r\n }\r\n return Axios.get(url, options)\r\n },\r\n // If it is possible to pass data, it may follow the url\r\n post (url, data, headers, params) {\r\n let options = {};\r\n if (params) {\r\n options.params = params\r\n }\r\n\r\n if (headers) { \r\n options.headers = headers \r\n }\r\n return Axios.post(url, data, options)\r\n }\r\n}\r\n","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\components\\searchInput.js",["182"],"import React, { Component } from 'react'\r\nimport '../assets/css/detail.css'\r\nimport { Input, Button } from 'element-react';\r\nimport {\r\n browserHistory,\r\n Link\r\n} from 'react-router-dom';\r\nexport class SearchInput extends Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n keyword: this.props.plach||''\r\n }\r\n }\r\n getKeyword = () => {\r\n this.props.parentFn(this.state.keyword)\r\n }\r\n render() {\r\n let btn;\r\n if(!this.props.plach){\r\n btn=( <div className=\"ml10\" onClick={this.getKeyword}><Link to={'/SearchBook/'+this.state.keyword}><Button >search for</Button></Link></div>)\r\n }else{\r\n btn=(<div className=\"ml10\" onClick={this.getKeyword}><Button >search for</Button></div>)\r\n }\r\n return (\r\n <div className=\"flex-row w100\">\r\n <Input value={this.state.keyword} ref=\"search\" placeholder=\"Enter keywords to search for books\" onChange={this.onChange.bind(this, 'keyword')}></Input>\r\n {btn}\r\n </div>\r\n )\r\n }\r\n onChange = (key, value) => {\r\n this.setState({\r\n keyword: value\r\n })\r\n }\r\n}\r\n","C:\\Users\\53549\\Desktop\\304cem\\my-app\\src\\api\\request.js",["183"],"import axios from 'axios' //Pack it up for him\r\n// import { Toast } from \"vant\";\r\n\r\n// Create axios instance\r\nlet service = axios.create({\r\n timeout: 60000 // Did not get response timeout limit\r\n})\r\n\r\n// Add a request interceptor req request What to do when the front end requests through axios\r\nservice.interceptors.request.use(\r\n (config) => {\r\n // cofig -> request header\r\n // The request is processed before sending, and some of the back-end interfaces need to carry token verification\r\n // The user is changing the password to purchase the product, the login will expire\r\n // config.headers = {'token': localStorage.getItem('token')}\r\n // Toast.loading({\r\n // mask: true,\r\n // message: 'Loading...',\r\n // });\r\n \r\n return config\r\n },\r\n (error) => {\r\n // Request error handling If you find that your request is wrong, you can define the error returned by yourself\r\n // Toast.clear()\r\n // Toast('Request timeout')\r\n return Promise.reject(error)\r\n }\r\n)\r\n \r\n// Add a response interceptor res response What to do before the data is returned\r\nservice.interceptors.response.use(\r\n (response) => {\r\n // Toast.clear()\r\n // let { data } = response;\r\n \r\n return response\r\n },\r\n (error) => {\r\n // Toast.clear()\r\n // Toast('Request timeout')\r\n return Promise.reject(error.response);\r\n }\r\n)\r\n\r\nexport default function() {\r\n return service\r\n}",{"ruleId":"184","replacedBy":"185"},{"ruleId":"186","replacedBy":"187"},{"ruleId":"188","severity":1,"message":"189","line":4,"column":5,"nodeType":"190","messageId":"191","endLine":4,"endColumn":9},{"ruleId":"188","severity":1,"message":"192","line":7,"column":64,"nodeType":"190","messageId":"191","endLine":7,"endColumn":67},{"ruleId":"188","severity":1,"message":"193","line":7,"column":69,"nodeType":"190","messageId":"191","endLine":7,"endColumn":73},{"ruleId":"188","severity":1,"message":"194","line":7,"column":90,"nodeType":"190","messageId":"191","endLine":7,"endColumn":98},{"ruleId":"188","severity":1,"message":"195","line":7,"column":100,"nodeType":"190","messageId":"191","endLine":7,"endColumn":105},{"ruleId":"188","severity":1,"message":"196","line":7,"column":107,"nodeType":"190","messageId":"191","endLine":7,"endColumn":113},{"ruleId":"188","severity":1,"message":"197","line":7,"column":115,"nodeType":"190","messageId":"191","endLine":7,"endColumn":122},{"ruleId":"198","severity":1,"message":"199","line":49,"column":33,"nodeType":"200","endLine":49,"endColumn":131},{"ruleId":"201","severity":1,"message":"202","line":93,"column":50,"nodeType":"203","messageId":"204","endLine":93,"endColumn":52},{"ruleId":"201","severity":1,"message":"202","line":93,"column":74,"nodeType":"203","messageId":"204","endLine":93,"endColumn":76},{"ruleId":"201","severity":1,"message":"202","line":106,"column":137,"nodeType":"203","messageId":"204","endLine":106,"endColumn":139},{"ruleId":"188","severity":1,"message":"205","line":133,"column":13,"nodeType":"190","messageId":"191","endLine":133,"endColumn":17},{"ruleId":"201","severity":1,"message":"202","line":186,"column":28,"nodeType":"203","messageId":"204","endLine":186,"endColumn":30},{"ruleId":"201","severity":1,"message":"202","line":200,"column":20,"nodeType":"203","messageId":"204","endLine":200,"endColumn":22},{"ruleId":"201","severity":1,"message":"202","line":209,"column":24,"nodeType":"203","messageId":"204","endLine":209,"endColumn":26},{"ruleId":"201","severity":1,"message":"202","line":237,"column":28,"nodeType":"203","messageId":"204","endLine":237,"endColumn":30},{"ruleId":"206","severity":1,"message":"207","line":248,"column":9,"nodeType":"208","endLine":248,"endColumn":24},{"ruleId":"188","severity":1,"message":"209","line":315,"column":13,"nodeType":"190","messageId":"191","endLine":315,"endColumn":17},{"ruleId":"188","severity":1,"message":"210","line":6,"column":5,"nodeType":"190","messageId":"191","endLine":6,"endColumn":19},{"ruleId":"201","severity":1,"message":"202","line":93,"column":37,"nodeType":"203","messageId":"204","endLine":93,"endColumn":39},{"ruleId":"188","severity":1,"message":"189","line":3,"column":5,"nodeType":"190","messageId":"191","endLine":3,"endColumn":9},{"ruleId":"188","severity":1,"message":"211","line":8,"column":10,"nodeType":"190","messageId":"191","endLine":8,"endColumn":14},{"ruleId":"188","severity":1,"message":"212","line":8,"column":16,"nodeType":"190","messageId":"191","endLine":8,"endColumn":21},{"ruleId":"188","severity":1,"message":"213","line":8,"column":31,"nodeType":"190","messageId":"191","endLine":8,"endColumn":41},{"ruleId":"188","severity":1,"message":"214","line":12,"column":17,"nodeType":"190","messageId":"191","endLine":12,"endColumn":28},{"ruleId":"188","severity":1,"message":"215","line":12,"column":29,"nodeType":"190","messageId":"191","endLine":12,"endColumn":33},{"ruleId":"188","severity":1,"message":"216","line":15,"column":8,"nodeType":"190","messageId":"191","endLine":15,"endColumn":13},{"ruleId":"188","severity":1,"message":"217","line":37,"column":13,"nodeType":"190","messageId":"191","endLine":37,"endColumn":16},{"ruleId":"218","severity":1,"message":"219","line":103,"column":45,"nodeType":"200","endLine":103,"endColumn":84},{"ruleId":"188","severity":1,"message":"213","line":8,"column":10,"nodeType":"190","messageId":"191","endLine":8,"endColumn":20},{"ruleId":"188","severity":1,"message":"189","line":4,"column":5,"nodeType":"190","messageId":"191","endLine":4,"endColumn":9},{"ruleId":"188","severity":1,"message":"210","line":4,"column":11,"nodeType":"190","messageId":"191","endLine":4,"endColumn":25},{"ruleId":"201","severity":1,"message":"202","line":73,"column":51,"nodeType":"203","messageId":"204","endLine":73,"endColumn":53},{"ruleId":"201","severity":1,"message":"202","line":73,"column":89,"nodeType":"203","messageId":"204","endLine":73,"endColumn":91},{"ruleId":"201","severity":1,"message":"202","line":84,"column":41,"nodeType":"203","messageId":"204","endLine":84,"endColumn":43},{"ruleId":"206","severity":1,"message":"207","line":116,"column":9,"nodeType":"208","endLine":116,"endColumn":24},{"ruleId":"201","severity":1,"message":"202","line":76,"column":51,"nodeType":"203","messageId":"204","endLine":76,"endColumn":53},{"ruleId":"201","severity":1,"message":"202","line":76,"column":91,"nodeType":"203","messageId":"204","endLine":76,"endColumn":93},{"ruleId":"201","severity":1,"message":"202","line":87,"column":39,"nodeType":"203","messageId":"204","endLine":87,"endColumn":41},{"ruleId":"201","severity":1,"message":"202","line":121,"column":30,"nodeType":"203","messageId":"204","endLine":121,"endColumn":32},{"ruleId":"206","severity":1,"message":"207","line":151,"column":9,"nodeType":"208","endLine":151,"endColumn":24},{"ruleId":"206","severity":1,"message":"207","line":32,"column":9,"nodeType":"208","endLine":32,"endColumn":24},{"ruleId":"201","severity":1,"message":"202","line":49,"column":24,"nodeType":"203","messageId":"204","endLine":49,"endColumn":26},{"ruleId":"206","severity":1,"message":"207","line":117,"column":9,"nodeType":"208","endLine":117,"endColumn":24},{"ruleId":"201","severity":1,"message":"202","line":133,"column":57,"nodeType":"203","messageId":"204","endLine":133,"endColumn":59},{"ruleId":"188","severity":1,"message":"189","line":4,"column":5,"nodeType":"190","messageId":"191","endLine":4,"endColumn":9},{"ruleId":"188","severity":1,"message":"210","line":4,"column":11,"nodeType":"190","messageId":"191","endLine":4,"endColumn":25},{"ruleId":"188","severity":1,"message":"220","line":6,"column":25,"nodeType":"190","messageId":"191","endLine":6,"endColumn":31},{"ruleId":"188","severity":1,"message":"221","line":6,"column":33,"nodeType":"190","messageId":"191","endLine":6,"endColumn":37},{"ruleId":"188","severity":1,"message":"212","line":6,"column":39,"nodeType":"190","messageId":"191","endLine":6,"endColumn":44},{"ruleId":"201","severity":1,"message":"202","line":94,"column":39,"nodeType":"203","messageId":"204","endLine":94,"endColumn":41},{"ruleId":"188","severity":1,"message":"213","line":7,"column":10,"nodeType":"190","messageId":"191","endLine":7,"endColumn":20},{"ruleId":"201","severity":1,"message":"202","line":117,"column":51,"nodeType":"203","messageId":"204","endLine":117,"endColumn":53},{"ruleId":"201","severity":1,"message":"202","line":117,"column":89,"nodeType":"203","messageId":"204","endLine":117,"endColumn":91},{"ruleId":"188","severity":1,"message":"222","line":9,"column":10,"nodeType":"190","messageId":"191","endLine":9,"endColumn":16},{"ruleId":"188","severity":1,"message":"213","line":9,"column":23,"nodeType":"190","messageId":"191","endLine":9,"endColumn":33},{"ruleId":"188","severity":1,"message":"223","line":10,"column":10,"nodeType":"190","messageId":"191","endLine":10,"endColumn":34},{"ruleId":"188","severity":1,"message":"224","line":2,"column":16,"nodeType":"190","messageId":"191","endLine":2,"endColumn":26},{"ruleId":"188","severity":1,"message":"210","line":5,"column":5,"nodeType":"190","messageId":"191","endLine":5,"endColumn":19},{"ruleId":"201","severity":1,"message":"202","line":60,"column":65,"nodeType":"203","messageId":"204","endLine":60,"endColumn":67},{"ruleId":"206","severity":1,"message":"207","line":89,"column":9,"nodeType":"208","endLine":89,"endColumn":24},{"ruleId":"206","severity":1,"message":"207","line":99,"column":9,"nodeType":"208","endLine":99,"endColumn":24},{"ruleId":"206","severity":1,"message":"207","line":104,"column":9,"nodeType":"208","endLine":104,"endColumn":24},{"ruleId":"201","severity":1,"message":"202","line":109,"column":38,"nodeType":"203","messageId":"204","endLine":109,"endColumn":40},{"ruleId":"218","severity":1,"message":"219","line":151,"column":33,"nodeType":"200","endLine":151,"endColumn":86},{"ruleId":"225","severity":1,"message":"226","line":5,"column":1,"nodeType":"227","endLine":28,"endColumn":2},{"ruleId":"188","severity":1,"message":"210","line":5,"column":5,"nodeType":"190","messageId":"191","endLine":5,"endColumn":19},{"ruleId":"225","severity":1,"message":"228","line":46,"column":1,"nodeType":"227","endLine":48,"endColumn":2},"no-native-reassign",["229"],"no-negated-in-lhs",["230"],"no-unused-vars","'Link' is defined but never used.","Identifier","unusedVar","'Tag' is defined but never used.","'Icon' is defined but never used.","'Checkbox' is defined but never used.","'Radio' is defined but never used.","'Upload' is defined but never used.","'Message' is defined but never used.","jsx-a11y/img-redundant-alt","Redundant alt attribute. Screen-readers already announce `img` tags as an image. You don’t need to use the words `image`, `photo,` or `picture` (or any specified custom words) in the alt prop.","JSXOpeningElement","eqeqeq","Expected '===' and instead saw '=='.","BinaryExpression","unexpected","'info' is assigned a value but never used.","react/no-direct-mutation-state","Do not mutate state directly. Use setState().","MemberExpression","'book' is assigned a value but never used.","'browserHistory' is defined but never used.","'Menu' is defined but never used.","'Input' is defined but never used.","'Breadcrumb' is defined but never used.","'getComments' is defined but never used.","'isbn' is defined but never used.","'jsonp' is defined but never used.","'api' is assigned a value but never used.","jsx-a11y/alt-text","img elements must have an alt prop, either with meaningful text, or an empty string for decorative images.","'Dialog' is defined but never used.","'Form' is defined but never used.","'Layout' is defined but never used.","'BOOLEAN_BINARY_OPERATORS' is defined but never used.","'MessageBox' is defined but never used.","import/no-anonymous-default-export","Assign object to a variable before exporting as module default","ExportDefaultDeclaration","Unexpected default export of anonymous function","no-global-assign","no-unsafe-negation"]