detail.vue 7.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. <template>
  2. <div class="subPage edit-book" :style="{ padding: '20px' }">
  3. <el-form :model="formData" :rules="rules" ref="ruleForm" label-width="100px" :style="{ width: '600px' }">
  4. <div v-if="!active">
  5. <el-form-item label="条形码" prop="BookBarcode">
  6. <el-input v-model="formData.BookBarcode" :style="{ width: '200px' }"></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. </div>
  12. <div v-else>
  13. <el-form-item label="条形码">
  14. <el-input v-model="formData.BookBarcode" :style="{ width: '200px' }" :disabled="true"></el-input>
  15. </el-form-item>
  16. <el-form-item label="案场" prop="CaseId">
  17. <el-select v-model="formData.CaseId" placeholder="请选择案场" :disabled="detail.BookId?true:false" @change="filterTypes">
  18. <el-option
  19. v-for="item in cases"
  20. :key="item.CaseId"
  21. :label="item.CaseName"
  22. :value="item.CaseId"
  23. ></el-option>
  24. </el-select>
  25. </el-form-item>
  26. <div class="red-hint" style="margin-left:100px;">建议上传156*220尺寸的图片</div>
  27. <el-form-item label="图片" prop="BookImg">
  28. <el-upload
  29. class="avatar-uploader"
  30. action=""
  31. :show-file-list="false"
  32. :on-success="uploadSuccess"
  33. :before-upload="toolClass.beforeUpload"
  34. :http-request="toolClass.upload"
  35. >
  36. <img v-if="formData.BookImg" :src="formData.BookImg + '?x-oss-process=style/compress-rotate'" class="avatar">
  37. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  38. </el-upload>
  39. </el-form-item>
  40. <el-form-item label="图书名" prop="BookName">
  41. <el-input v-model="formData.BookName" :style="{ width: '200px' }"></el-input>
  42. </el-form-item>
  43. <el-form-item label="分类" prop="BookTypeId">
  44. <el-select v-model="formData.BookTypeId" placeholder="请选择分类">
  45. <el-option
  46. v-for="item in types"
  47. :key="item.BookTypeId"
  48. :label="item.BookTypeName"
  49. :value="item.BookTypeId"
  50. ></el-option>
  51. </el-select>
  52. </el-form-item>
  53. <el-form-item label="作者" prop="Author">
  54. <el-input v-model="formData.Author" :style="{ width: '200px' }"></el-input>
  55. </el-form-item>
  56. <el-form-item label="出版社" prop="Publisher">
  57. <el-input v-model="formData.Publisher" :style="{ width: '200px' }"></el-input>
  58. </el-form-item>
  59. <el-form-item label="价格" prop="Price">
  60. <el-input-number v-model="formData.Price" :precision="2" controls-position="right" :style="{ width: '200px' }"></el-input-number>
  61. </el-form-item>
  62. <el-form-item label="总数量" prop="InStock">
  63. <el-input-number v-model="formData.InStock" :disabled="detail.BookId?true:false" controls-position="right" :style="{ width: '200px' }"></el-input-number>
  64. </el-form-item>
  65. <el-form-item label="借阅时间" prop="BorrowDays">
  66. <el-input-number v-model="formData.BorrowDays" controls-position="right" :style="{ width: '200px' }"></el-input-number>
  67. <span> /天</span>
  68. </el-form-item>
  69. <el-form-item label="图书描述" prop="BookDescription">
  70. <el-input type="textarea" rows="4" v-model="formData.BookDescription" :style="{ width: '400px' }"></el-input>
  71. </el-form-item>
  72. <el-form-item :style="{ paddingTop: '40px' }">
  73. <el-button type="primary" @click="submit()">保存</el-button>
  74. <el-button @click="$router.back()">取消</el-button>
  75. </el-form-item>
  76. </div>
  77. </el-form>
  78. </div>
  79. </template>
  80. <script>
  81. import { createNamespacedHelpers, mapState } from 'vuex'
  82. const {
  83. mapState: mapLibSate,
  84. mapActions,
  85. mapMutations
  86. } = createNamespacedHelpers('library')
  87. export default {
  88. name: 'bookDetail',
  89. data() {
  90. return {
  91. active: 0,
  92. rules: {
  93. BookBarcode: [{ required: true, message: '请录入条形码', trigger: 'blur' }],
  94. BookName: [{ required: true, message: '请输入图书名称', trigger: 'blur' }],
  95. // BookImg: [{ required: true, message: '请上传图片', trigger: 'change' }],
  96. CaseId: [{ required: true, message: '请选择一个案场', trigger: 'change' }],
  97. BookTypeId: [{ required: true, message: '请选择一个分类', trigger: 'change' }],
  98. InStock: [{ required: true, message: '请设置总数量', trigger: 'change' }],
  99. BorrowDays: [{ required: true, message: '请设置借阅时间', trigger: 'change' }],
  100. },
  101. formData: {},
  102. }
  103. },
  104. created() {
  105. const id = this.$route.params.id
  106. if (id) {
  107. this.active = 1
  108. this.getInfo({ id }).then((x) => {
  109. this.filterTypes(x.CaseId)
  110. }).catch(err => {
  111. this.$message({
  112. showClose: true,
  113. message: err,
  114. type: 'error'
  115. })
  116. })
  117. } else {
  118. this.active = 0
  119. }
  120. },
  121. computed: {
  122. ...mapState({
  123. cases: x => x.app.cases.list,
  124. defaultCase: x => x.app.cases.default,
  125. orgid: x => x.app.user.OrgId
  126. }),
  127. ...mapLibSate({
  128. detail: s => s.detail,
  129. types: s => s.type.list,
  130. }),
  131. },
  132. watch: {
  133. detail: {
  134. handler (nv, ov) {
  135. if (nv.BookId === this.formData.BookId) {
  136. return
  137. }
  138. if (!this.$route.params.id) {
  139. return
  140. }
  141. let CaseId = nv.CaseId
  142. if (!CaseId) {
  143. CaseId = this.defaultCase
  144. }
  145. this.formData = { ...nv, CaseId }
  146. },
  147. immediate: true,
  148. },
  149. },
  150. beforeRouteLeave (to, from, next) {
  151. this.resetStore('detail')
  152. this.resetStore('type.list')
  153. next()
  154. },
  155. methods: {
  156. ...mapMutations({
  157. mergeDetail: 'mergeBookDetail',
  158. resetStore: 'clearData',
  159. }),
  160. ...mapActions({
  161. getInfo: 'getBookDetail',
  162. getTypeList: 'getTypeList',
  163. updateDetail: 'updateBookDetail'
  164. }),
  165. nextStep() {
  166. if (!this.formData.BookBarcode) {
  167. this.$message({
  168. showClose: true,
  169. message: '请录入条形码',
  170. type: 'error'
  171. })
  172. return
  173. }
  174. this.$confirm('条形码一旦输入将不能改变!', '请确认条形码正确', {
  175. confirmButtonText: '已确认',
  176. cancelButtonText: '取消',
  177. type: 'warning'
  178. })
  179. .then(() => {
  180. this.active = 1
  181. })
  182. .catch(x => x)
  183. },
  184. uploadSuccess(res) {
  185. this.$set(this.formData, 'BookImg', res.result.url)
  186. // this.formData.BookImg = res.result.url
  187. },
  188. filterTypes(val) {
  189. this.getTypeList({ page: 0, caseid: val, pagesize: 10000 })
  190. },
  191. submit() {
  192. this.$refs.ruleForm.validate(valid => {
  193. if (valid) {
  194. if (!this.formData.Price) {
  195. this.formData.Price = 0
  196. }
  197. this.updateDetail(this.formData)
  198. .then(() => {
  199. this.$message({
  200. showClose: true,
  201. message: '更新或编辑成功',
  202. type: 'success'
  203. })
  204. this.$router.push({ name: 'libraryList' })
  205. })
  206. .catch(err => {
  207. this.$message({
  208. showClose: true,
  209. message: err,
  210. type: 'error'
  211. })
  212. })
  213. } else {
  214. this.$message({
  215. showClose: true,
  216. message: '表单填写错误',
  217. type: 'error'
  218. })
  219. return false
  220. }
  221. })
  222. }
  223. }
  224. }
  225. </script>
  226. <style lang="scss">
  227. .edit-book {
  228. .el-input__inner {
  229. text-align: left;
  230. }
  231. }
  232. </style>