beefInStore.vue 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. /**
  2. // author:zhangb
  3. // time:2023-01-09
  4. // desc:仓库中牛只
  5. */
  6. <template>
  7. <div class="beefInStore">
  8. <!-- 筛选 -->
  9. <Row :gutter="8">
  10. <Col span="5">
  11. <Input placeholder="请输入商品名称" v-model="filtInfoData.name" @on-change="getData" style="width: 95%" clearable>
  12. </Input>
  13. </Col>
  14. <Col span="4">
  15. <Cascader :data="classifyDataList" change-on-select v-model="filtInfoData.classifyId" @on-change="changeSelClassify" style="width:13rem;" />
  16. </Col>
  17. </Row>
  18. <!-- 表格部分 -->
  19. <el-table :data="onStoreTabData.data" border style="width: 100%; margin-top:20px;">
  20. <el-table-column type="expand">
  21. <template #default="props">
  22. <div style="width:90%; margin:1em auto;">
  23. <el-table :data="props.row.cattleSkuList">
  24. <el-table-column type="index" label="序号" width="55" align="center" />
  25. <el-table-column label="规格重量" prop="weight" />
  26. <el-table-column label="牛只价格" prop="price" >
  27. <template #default="scope">
  28. <Numeral :value="scope.row.price" format="0,0.00" style="color:#D64E47; font-weight:bold;">
  29. <template #prefix>
  30. <strong>¥</strong>
  31. </template>
  32. </Numeral>
  33. </template>
  34. </el-table-column>
  35. <el-table-column label="单位" prop="unit" />
  36. <el-table-column label="牛只数量(头)" prop="count" />
  37. <el-table-column label="起售量(头)" prop="quantity" />
  38. <el-table-column label="规格图片" >
  39. <template #default="scope">
  40. <img :src="scope.row.imgUrl" style="width: 5rem"/>
  41. </template>
  42. </el-table-column>
  43. <el-table-column label="操作" width="200" fixed="right">
  44. <template #default="scope">
  45. <el-button size="small" type="success" @click="toSafe(scope.row.id)">上架</el-button>&nbsp;
  46. <el-button size="small" type="danger" @click="delBeef(true,scope.row.id)">删除</el-button>
  47. </template>
  48. </el-table-column>
  49. </el-table>
  50. </div>
  51. </template>
  52. </el-table-column>
  53. <el-table-column type="index" label="序号" width="55" align="center" />
  54. <el-table-column prop="name" label="商品名称"/>
  55. <el-table-column label="上架时间" align="center" width="170">
  56. <template #default="scope">
  57. {{ moment(scope.row.addTime).format('yyyy-MM-DD hh:mm:ss')}}
  58. </template>
  59. </el-table-column>
  60. <el-table-column label="所属分类" width="200" align="center">
  61. <template #default="scope">
  62. {{ scope.row.classifyOneName}}/{{scope.row.classifyTwoName }}/{{scope.row.classifyThreeName }}
  63. </template>
  64. </el-table-column>
  65. <el-table-column prop="previewMoney" label="看牛定金(元/头)" align="center" >
  66. <template #default="scope">
  67. <Numeral :value="scope.row.previewMoney" format="0,0.00" style="color:#D64E47; font-weight:bold;">
  68. <template #prefix>
  69. <strong>¥</strong>
  70. </template>
  71. </Numeral>
  72. </template>
  73. </el-table-column>
  74. <el-table-column prop="previewType" label="看牛模式" align="center">
  75. <template #default="scope">
  76. <Tag color="green" v-if="scope.row.previewType == 2">现场看牛</Tag>
  77. <Tag color="magenta" v-if="scope.row.previewType == 1">预约看牛</Tag>
  78. </template>
  79. </el-table-column>
  80. <el-table-column label="牛只所在地" width="250" >
  81. <template #default="scope">
  82. <Icon type="md-pin" color="#2db7f5" />
  83. <span style="color:#999; font-size:12px;">{{ scope.row.province}}-{{ scope.row.city }}-{{scope.row.area }}</span>
  84. </template>
  85. </el-table-column>
  86. <el-table-column label="操作" width="150" fixed="right">
  87. <template #default="scope">
  88. <el-button size="small" type="primary" @click="editBeef(scope.row.id)">编辑</el-button>&nbsp;
  89. <el-button size="small" type="danger" @click="delBeef(false,scope.row.id)">删除</el-button>&nbsp;
  90. </template>
  91. </el-table-column>
  92. </el-table>
  93. <!-- 分页 -->
  94. <div class="page_style">
  95. <Page :total="onStoreTabData.total" :model-value="currentPage" show-elevator show-total @on-change="changePage" />
  96. </div>
  97. <!-- 确定框 -->
  98. <Modal v-model="showModal" title="提示" @on-ok="ok" @on-cancel="cancel">
  99. <p v-if="delStatus">确定要上架此商品吗?</p>
  100. <p v-if="!delStatus">确定要删除此商品吗?</p>
  101. </Modal>
  102. </div>
  103. </template>
  104. <script>
  105. import { defineComponent, ref ,reactive, onMounted} from 'vue'
  106. import { cow } from '@/request/api'
  107. import moment from 'moment'
  108. export default defineComponent({
  109. components:{
  110. },
  111. setup() {
  112. let filtInfoData = reactive({ // 搜索
  113. limit:10,offset:0,
  114. name:'',
  115. classifyId:'',
  116. status:'1'
  117. })
  118. let onStoreTabData = ref([]) // 列表数据
  119. let delStatus = ref(true) // 区分删除和上架
  120. let del = ref(true) // 区分删除的数据
  121. let delId = ref() // 区分删除的数据
  122. //获取列表内容
  123. async function getData(){
  124. await cow.getCattleItemPage(filtInfoData).then(res =>{
  125. if (res.code == 101) {
  126. onStoreTabData.value = res
  127. }
  128. })
  129. }
  130. // 获取全部牛只分类内容
  131. let classifyDataList = ref([]) //分类列表数据
  132. async function getAllClassifyData(){
  133. await cow.getCattleClassify().then(res=>{
  134. if(res.code === 101){
  135. let finalData = rinseClassiftData(res.data)
  136. classifyDataList.value = finalData
  137. }
  138. })
  139. }
  140. // 清洗分类数据
  141. function rinseClassiftData(data){
  142. data = JSON.parse(JSON.stringify(data).replace(/name/g, 'label'))
  143. data = JSON.parse(JSON.stringify(data).replace(/id/g, 'value'))
  144. return data
  145. }
  146. // 改变选择的分类
  147. function changeSelClassify(val,arr){
  148. filtInfoData.classifyOne = arr[0]?arr[0].value:''
  149. filtInfoData.classifyTwo = arr[1]?arr[1].value:''
  150. filtInfoData.classifyThree = arr[2]?arr[2].value:''
  151. getData()
  152. }
  153. let currentPage = ref(1)
  154. //更改页码
  155. function changePage (page) {
  156. if(onStoreTabData.value.limit){
  157. filtInfoData.offset = (page -1) * onStoreTabData.value.limit //更新偏移量
  158. currentPage = page //切换当前页码
  159. getData()
  160. }
  161. }
  162. const showModal = ref(false)
  163. const skuIds = ref([])
  164. onMounted(()=>{
  165. getData()
  166. getAllClassifyData()
  167. })
  168. return {
  169. onStoreTabData,filtInfoData,currentPage,classifyDataList,showModal,skuIds,delStatus,del,delId,getAllClassifyData,changeSelClassify,
  170. getData,changePage,moment
  171. }
  172. },
  173. methods: {
  174. //牛只上架
  175. toSafe(id){
  176. this.skuIds = []
  177. this.skuIds.push(id)
  178. this.delStatus = true
  179. this.showModal = true
  180. },
  181. // 确定上架
  182. async ok () {
  183. this.showModal = false
  184. if(this.delStatus){
  185. // 上架
  186. await cow.setToSale(this.skuIds).then(res =>{
  187. if (res.code == 101) {
  188. this.$message.success(res.message)
  189. this.getData()
  190. }else{
  191. this.$message.error(res.message)
  192. }
  193. })
  194. }else{
  195. const cattleSpu ={
  196. id:this.delId,
  197. deleted:"1"
  198. }
  199. if(this.del){
  200. // 删除牛只
  201. await cow.updateCattleSku(cattleSpu).then(res =>{
  202. if (res.code == 101) {
  203. this.$message.success('删除成功')
  204. this.getData()
  205. }else{
  206. this.$message.error(res.message)
  207. }
  208. })
  209. }else{
  210. // 删除商品
  211. await cow.updateCattleSpu(cattleSpu).then(res =>{
  212. if (res.code == 101) {
  213. this.$message.success('删除成功')
  214. this.getData()
  215. }else{
  216. this.$message.error(res.message)
  217. }
  218. })
  219. }
  220. }
  221. },
  222. cancel () {
  223. this.showModal = false
  224. },
  225. // 编辑
  226. editBeef(id){
  227. this.$router.push('editBeef?id='+id)
  228. },
  229. // 删除
  230. async delBeef(val,id){
  231. this.delStatus = false
  232. this.showModal = true
  233. this.del = val
  234. this.delId = id
  235. }
  236. }
  237. })
  238. </script>
  239. <style lang="scss" scoped>
  240. .beefInStore{
  241. padding: 1em;
  242. .page_style{
  243. text-align: right; margin-top: 1em;
  244. background-color: var(--system-container-background);
  245. }
  246. }
  247. </style>