list.vue 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. <template>
  2. <div>
  3. <a-card title="订单列表">
  4. <template #extra>
  5. <a-button @click="getOrders">刷新</a-button>
  6. <!-- <a-button type="primary" @click="$refs.modal.showModal('add')" v-if="permissionsList.indexOf('merchant_orders:order_create')>-1">新建订单</a-button> -->
  7. </template>
  8. <SearchForm :span="[8,8,24]" :form="queryParam" @submit="getOrders">
  9. <template #basic>
  10. <a-col :lg="8" :md="8" :sm="24">
  11. <a-form-item name="status" label="状态">
  12. <a-select
  13. v-model:value="queryParam.status"
  14. :options="orderStatusArr"
  15. mode="multiple"
  16. >
  17. </a-select>
  18. </a-form-item>
  19. </a-col>
  20. <a-col :lg="8" :md="8" :sm="24">
  21. <a-form-item name="merchantOrderId" label="商户订单号">
  22. <a-input v-model:value="queryParam.merchantOrderId" />
  23. </a-form-item>
  24. </a-col>
  25. <a-col :lg="8" :md="8" :sm="24">
  26. <a-form-item name="outOrderNo" label="外部订单号">
  27. <a-input v-model:value="queryParam.outOrderNo" />
  28. </a-form-item>
  29. </a-col>
  30. <a-col :lg="8" :md="8" :sm="24">
  31. <a-form-item name="otaChannelId" label="OTA渠道">
  32. <a-select
  33. v-model:value="queryParam.otaChannelId"
  34. allowClear
  35. :options="otaList"
  36. showSearch
  37. :filterOption="true"
  38. optionFilterProp="label">
  39. </a-select>
  40. </a-form-item>
  41. </a-col>
  42. <a-col :lg="8" :md="8" :sm="24">
  43. <a-form-item name="otaOrderNo">
  44. <template #label>
  45. OTA订单号
  46. <a-tooltip>
  47. <template #title>对应ota平台的“分销平台订单号”</template>
  48. <QuestionCircleOutlined style="color:red; margin-left:3px"/>
  49. </a-tooltip>
  50. </template>
  51. <a-input v-model:value="queryParam.otaOrderNo" />
  52. </a-form-item>
  53. </a-col>
  54. <a-col :lg="8" :md="8" :sm="24">
  55. <a-form-item name="projectId" label="景区">
  56. <ProjectSelector v-model:value="queryParam.projectId"></ProjectSelector>
  57. </a-form-item>
  58. </a-col>
  59. <a-col :lg="8" :md="8" :sm="24">
  60. <a-form-item name="merchantProductId" label="产品">
  61. <AgentProductSelector v-model:value="queryParam.merchantProductId"></AgentProductSelector>
  62. </a-form-item>
  63. </a-col>
  64. <a-col :lg="8" :md="8" :sm="24">
  65. <a-form-item name="merchantPricecodeId" label="产品价格码">
  66. <MerchantPricecodeSelector v-model:value="queryParam.merchantPricecodeId"></MerchantPricecodeSelector>
  67. </a-form-item>
  68. </a-col>
  69. <a-col :lg="8" :md="8" :sm="24">
  70. <a-form-item name="startTime" label="开始时间">
  71. <a-date-picker class="w100" :show-time="{ defaultValue: moment('00:00:00', 'HH:mm:ss') }" v-model:value="queryParam.startTime"></a-date-picker>
  72. </a-form-item>
  73. </a-col>
  74. <a-col :lg="8" :md="8" :sm="24">
  75. <a-form-item name="endTime" label="结束时间">
  76. <a-date-picker class="w100" :show-time="{ defaultValue: moment('23:59:59', 'HH:mm:ss') }" v-model:value="queryParam.endTime"></a-date-picker>
  77. </a-form-item>
  78. </a-col>
  79. <a-col :lg="8" :md="8" :sm="24">
  80. <a-form-item name="playDateStart" label="使用开始时间">
  81. <a-date-picker class="w100" v-model:value="queryParam.playDateStart"></a-date-picker>
  82. </a-form-item>
  83. </a-col>
  84. <a-col :lg="8" :md="8" :sm="24">
  85. <a-form-item name="playDateEnd" label="使用结束时间">
  86. <a-date-picker class="w100" v-model:value="queryParam.playDateEnd"></a-date-picker>
  87. </a-form-item>
  88. </a-col>
  89. <a-col :lg="8" :md="8" :sm="24">
  90. <a-form-item name="buyerName" label="购买人姓名">
  91. <a-input v-model:value="queryParam.buyerName" />
  92. </a-form-item>
  93. </a-col>
  94. <a-col :lg="8" :md="8" :sm="24">
  95. <a-form-item name="buyerIdentity" label="购买人证件号">
  96. <a-input v-model:value="queryParam.buyerIdentity" />
  97. </a-form-item>
  98. </a-col>
  99. <a-col :lg="8" :md="8" :sm="24">
  100. <a-form-item name="buyerPhone" label="购买人手机号">
  101. <a-input v-model:value="queryParam.buyerPhone" />
  102. </a-form-item>
  103. </a-col>
  104. </template>
  105. </SearchForm>
  106. <a-table
  107. :columns="columns"
  108. :data-source="orderList"
  109. :pagination="pagination"
  110. :loading="loading"
  111. :scroll="{x:1200}"
  112. :rowKey="record => record.id">
  113. <!-- <template #channel="{text:channel}">
  114. <span>
  115. {{ channel.name }}
  116. </span>
  117. </template>
  118. <template #buyerPapersType="{text:buyerPapersType}">
  119. <span>
  120. {{ paperType(buyerPapersType) }}
  121. </span>
  122. </template>
  123. <template #createTime="{text:createTime}">
  124. <span>
  125. {{ dayjs(createTime).format('YYYY-MM-DD HH:mm:ss') }}
  126. </span>
  127. </template>
  128. <template #status="{text:status}">
  129. <span>
  130. <a-tag :color="orderStatus[status]&&orderStatus[status].color"> {{ orderStatus[status]&&orderStatus[status].label }}</a-tag>
  131. </span>
  132. </template>
  133. <template #action="{ record }">
  134. <span>
  135. <a-button size="small" type="primary" ghost @click="$refs.detail.show(record.projectOrders)">景点订单</a-button>
  136. <a-popconfirm
  137. v-if="record.status ==='WAIT_USE'"
  138. title="确定取消此订单?"
  139. ok-text="确定"
  140. cancel-text="取消"
  141. @confirm="cancelOrders(record)"
  142. >
  143. <a-button size="small" type="primary" danger v-if="permissionsList.indexOf('merchant_orders:order_cancel')>-1">取消订单</a-button>
  144. </a-popconfirm>
  145. </span>
  146. </template>
  147. <template #expandedRowRender="{ record }">
  148. <a-table
  149. style="max-width:100%"
  150. :scroll="{x:1500}"
  151. :dataSource="record.products"
  152. :columns="productsColumns"
  153. :pagination="false"
  154. bordered
  155. :rowKey="record => record.id">
  156. <template #title>商品列表</template>
  157. <template #pricecodeNo="{record:record2}">
  158. <span>
  159. {{ record2.merchantPricecode.pricecodeNo }}
  160. </span>
  161. </template>
  162. <template #name="{record:record2}">
  163. <span>
  164. {{ record2.merchantPricecode.name }}
  165. </span>
  166. </template>
  167. <template #product="{record:record2}">
  168. <span>
  169. {{ record2.merchantProduct.name }}
  170. </span>
  171. </template>
  172. <template #guestPapersType="{text:guestPapersType}">
  173. <span>
  174. {{ paperType(guestPapersType) }}
  175. </span>
  176. </template>
  177. <template #status="{text:status}">
  178. <span>
  179. <a-tag :color="productOrderStatus[status]&&productOrderStatus[status].color"> {{ productOrderStatus[status]&&productOrderStatus[status].label }}</a-tag>
  180. </span>
  181. </template>
  182. <template #action="{record:record2}">
  183. <a-popconfirm
  184. v-if="record2.status === 'WAIT_USE'"
  185. title="确定取消此产品?"
  186. ok-text="确定"
  187. cancel-text="取消"
  188. @confirm="cancelOrders(record,record2.ticketNo)"
  189. >
  190. <a-button type="link">取消</a-button>
  191. </a-popconfirm>
  192. <a-button type="link" v-if="record2.status === 'USED' || record2.status === 'PART_USE'" @click="showGoodsDetail(record2.id)">查看商品信息</a-button>
  193. <a-button v-if="record.channel.code==='MERCHANTSELF'" type="link" @click="qrcode.show(record2)">二维码</a-button>
  194. </template>
  195. </a-table>
  196. </template> -->
  197. </a-table>
  198. </a-card>
  199. <Modal ref="modal" @update="getOrders"></Modal>
  200. <Detail ref="goodDetailRef"></Detail>
  201. <Detail ref="detail"></Detail>
  202. <QRcode ref="qrcode"></QRcode>
  203. </div>
  204. </template>
  205. <script>
  206. import moment from 'moment'
  207. import { columns, productsColumns } from './column'
  208. import { AgentProductSelector, MerchantPricecodeSelector, ProjectSelector } from '@/components'
  209. import SearchForm from '@/components/SearchForm.vue'
  210. import useData from './useData'
  211. import Modal from './Modal.vue'
  212. import Detail from './Detail.vue'
  213. import QRcode from './QRcode.vue'
  214. import { ref } from 'vue'
  215. import { QuestionCircleOutlined } from '@ant-design/icons-vue'
  216. export default {
  217. components: {
  218. Modal,
  219. Detail,
  220. QRcode,
  221. SearchForm,
  222. QuestionCircleOutlined,
  223. AgentProductSelector,
  224. MerchantPricecodeSelector,
  225. ProjectSelector
  226. },
  227. setup() {
  228. const qrcode = ref()
  229. return {
  230. qrcode,
  231. moment,
  232. columns,
  233. productsColumns,
  234. ...useData()
  235. }
  236. }
  237. }
  238. </script>
  239. <style lang="scss" scoped>
  240. .ant-table-wrapper{
  241. margin: 10px 0!important ;
  242. }
  243. .ant-col{
  244. margin-bottom: 8px;
  245. }
  246. </style>