borrow.vue 6.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. <template>
  2. <div class="subPage edit-book" :style="{ padding: '20px' }">
  3. <div v-if="!active">
  4. <el-form style="text-align: center;">
  5. <el-form-item>
  6. <el-input v-model="customerInfo" placeholder="会员手机号或条形码" :style="{ width: '400px' }"></el-input>
  7. </el-form-item>
  8. <el-form-item :style="{ paddingTop: '20px' }">
  9. <el-button type="primary" @click="nextStep()">下一步</el-button>
  10. </el-form-item>
  11. </el-form>
  12. </div>
  13. <div v-else>
  14. <!-- 用户信息区 -->
  15. <div :style="{ marginBottom: '20px', paddingBottom: '20px', borderBottom: '1px solid #eee' }">
  16. <el-row :gutter="20">
  17. <el-col :span="4">
  18. <span>姓名: </span><span>{{ borrowHistory.Name }}</span>
  19. </el-col>
  20. <el-col :span="4">
  21. <span>手机号: </span><span>{{ borrowHistory.Phone }}</span>
  22. </el-col>
  23. <el-col :span="4">
  24. <span>在借数量: </span><span>{{ borrowHistory.BorrowNum }}</span>
  25. </el-col>
  26. <el-col :span="4">
  27. <span>逾期数量: </span><span>{{ borrowHistory.LateNum }}</span>
  28. </el-col>
  29. <el-col :span="4">
  30. <span>历史是否有逾期: </span><span>{{ borrowHistory.IsLate === 'yes' ? '是' : '否' }}</span>
  31. </el-col>
  32. </el-row>
  33. </div>
  34. <!-- 过滤条件 -->
  35. <el-form inline>
  36. <el-form-item label="案场">
  37. <el-select v-model="caseId" size="medium" placeholder="请选择案场">
  38. <el-option
  39. v-for="item in cases"
  40. :key="item.CaseId"
  41. :label="item.CaseName"
  42. :value="item.CaseId"
  43. ></el-option>
  44. </el-select>
  45. </el-form-item>
  46. <el-form-item label="条形码">
  47. <el-input ref="barcode" v-model="formData.barcode" :style="{ width: '200px' }"></el-input>
  48. </el-form-item>
  49. <el-form-item label="书名">
  50. <el-input v-model="formData.name" :style="{ width: '200px' }"></el-input>
  51. </el-form-item>
  52. <el-form-item :style="{ float: 'right' }">
  53. <el-button type="primary" @click="search()">搜索</el-button>
  54. </el-form-item>
  55. </el-form>
  56. <!-- 可借阅列表 -->
  57. <el-table :data="list" border style="width: 100%" @selection-change="x => selectList = x">
  58. <el-table-column
  59. type="selection"
  60. width="55">
  61. </el-table-column>
  62. <el-table-column prop="BookBarcode" label="条形码"></el-table-column>
  63. <el-table-column prop="BookName" label="书名"></el-table-column>
  64. <el-table-column prop="BookTypeName" label="分类"></el-table-column>
  65. <el-table-column prop="LeftNum" label="可借数量"></el-table-column>
  66. <el-table-column prop="BorrowDays" label="规定借阅天数"></el-table-column>
  67. </el-table>
  68. <div :style="{ paddingTop: '40px' }">
  69. <el-button type="primary" @click="submit()">立即借阅</el-button>
  70. <el-button @click="$router.back()">取消</el-button>
  71. </div>
  72. </div>
  73. </div>
  74. </template>
  75. <script>
  76. import { createNamespacedHelpers, mapState } from 'vuex'
  77. const {
  78. mapState: mapLibSate,
  79. mapActions,
  80. } = createNamespacedHelpers('library')
  81. export default {
  82. name: 'bookBorrow',
  83. data() {
  84. return {
  85. active: 0,
  86. customerInfo: '',
  87. formData: { caseid: '', barcode: '', name: '' },
  88. selectList: [],
  89. }
  90. },
  91. computed: {
  92. ...mapState({
  93. cases: x => x.app.cases.list,
  94. defaultCase: x => x.app.cases.default,
  95. orgid: x => x.app.user.OrgId
  96. }),
  97. ...mapLibSate({
  98. list: s => s.list,
  99. borrowHistory: s => s.borrow.history,
  100. }),
  101. caseId: {
  102. get() {
  103. return this.formData.caseid || this.defaultCase
  104. },
  105. set(val) {
  106. this.formData.caseid = val
  107. },
  108. },
  109. },
  110. methods: {
  111. ...mapActions({
  112. getBorrowHistory: 'getBorrowHistory',
  113. getList: 'getBookList',
  114. borrowBooks: 'borrowBooks'
  115. }),
  116. nextStep() {
  117. if (!this.customerInfo) {
  118. this.$message({
  119. showClose: true,
  120. message: '请录入会员手机号或条形码',
  121. type: 'error'
  122. })
  123. return
  124. }
  125. this.getBorrowHistory({ customerInfo: this.customerInfo }).then(() => {
  126. this.active = 1
  127. }).catch(err => {
  128. this.$message({
  129. showClose: true,
  130. message: err,
  131. type: 'error'
  132. })
  133. })
  134. },
  135. search() {
  136. // 必须选案场
  137. if (!this.formData.caseid && !this.defaultCase) {
  138. this.$message({
  139. showClose: true,
  140. message: '请选择案场',
  141. type: 'error'
  142. })
  143. return
  144. }
  145. if (!this.formData.caseid) {
  146. this.formData.caseid = this.defaultCase
  147. }
  148. // 先扫码或者输入图书名称
  149. if (!this.formData.barcode && !this.formData.name) {
  150. this.$message({
  151. showClose: true,
  152. message: '请先扫码或者输入图书名称',
  153. type: 'error'
  154. })
  155. return
  156. }
  157. this.getList({
  158. ...this.formData,
  159. // customerphone: this.borrowHistory.Phone,
  160. }).catch(err => {
  161. this.$message({
  162. showClose: true,
  163. message: err,
  164. type: 'error'
  165. })
  166. })
  167. },
  168. submit() {
  169. if (!this.selectList || this.selectList.length === 0) {
  170. this.$message({
  171. showClose: true,
  172. message: '请选择借阅图书',
  173. type: 'error'
  174. })
  175. return
  176. }
  177. this.$confirm('确定借阅此书?', '提示', {
  178. confirmButtonText: '确定',
  179. cancelButtonText: '取消',
  180. type: 'warning'
  181. })
  182. .then(() => {
  183. const bookIds = this.selectList.map(({BookId}) => BookId).join(',')
  184. this.borrowBooks({
  185. bookIds,
  186. customerId: this.borrowHistory.CustomerId,
  187. }).then(() => {
  188. this.$message({
  189. showClose: true,
  190. message: '借阅成功',
  191. type: 'success'
  192. })
  193. }).catch(err => {
  194. this.$message({
  195. showClose: true,
  196. message: err,
  197. type: 'error'
  198. })
  199. })
  200. })
  201. .catch(x => x)
  202. },
  203. }
  204. }
  205. </script>
  206. <style lang="scss">
  207. </style>