index.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. <template>
  2. <div class="snapshot-re-send-list-container layout-padding">
  3. <div class="layout-padding-auto layout-padding-view pd20">
  4. <vxe-grid v-bind="gridOptions" ref="gridRef">
  5. <template #form>
  6. <el-form :model="state.queryParams" ref="ruleFormRef" inline @submit.native.prevent :disabled="gridOptions.loading">
  7. <el-form-item label="发送状态" prop="Status">
  8. <el-radio-group v-model="state.queryParams.Status" @change="handleQuery">
  9. <el-radio :value="0">全部</el-radio>
  10. <el-radio :value="1">已领取</el-radio>
  11. <el-radio :value="2">已退款</el-radio>
  12. <el-radio :value="3">发放失败</el-radio>
  13. <el-radio :value="4">待领取</el-radio>
  14. </el-radio-group>
  15. </el-form-item>
  16. <el-form-item label="行业" prop="IndustryId">
  17. <el-select v-model="state.queryParams.IndustryId" class="w100" placeholder="请选择行业" @change="handleQuery" clearable>
  18. <el-option v-for="item in industry" :key="item.id" :label="item.name" :value="item.id" />
  19. </el-select>
  20. </el-form-item>
  21. <el-form-item>
  22. <el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
  23. <el-button @click="drawer = true" class="default-button"> <SvgIcon name="ele-Search" class="mr5" />更多查询</el-button>
  24. </el-form-item>
  25. </el-form>
  26. </template>
  27. <template #order_detail="{ row }">
  28. <order-detail :order="row" @updateList="queryList">{{ row.title }}</order-detail>
  29. </template>
  30. <template #pager>
  31. <pagination
  32. @pagination="queryList"
  33. :total="state.total"
  34. v-model:current-page="state.queryParams.PageIndex"
  35. v-model:page-size="state.queryParams.PageSize"
  36. :disabled="state.loading"
  37. />
  38. </template>
  39. </vxe-grid>
  40. </div>
  41. <!-- 更多查询 -->
  42. <el-drawer v-model="drawer" title="更多查询" size="500px">
  43. <el-form :model="state.queryParams" ref="drawerRuleFormRef" @submit.native.prevent label-width="100px">
  44. <el-form-item label="工单编码" prop="No">
  45. <el-input v-model="state.queryParams.No" placeholder="请填写工单编码" clearable @keyup.enter="handleQuery" class="keyword-input" />
  46. </el-form-item>
  47. <el-form-item label="用户openid" prop="IndustryName">
  48. <el-input
  49. v-model="state.queryParams.IndustryName"
  50. placeholder="请填写用户openid"
  51. clearable
  52. @keyup.enter="handleQuery"
  53. class="keyword-input"
  54. />
  55. </el-form-item>
  56. <el-form-item label="发放用户类型" prop="UserType">
  57. <el-select v-model="state.queryParams.UserType" placeholder="请选择发放用户类型" @change="handleQuery" clearable>
  58. <el-option :value="1" label="市民" />
  59. <el-option :value="2" label="网格员" />
  60. </el-select>
  61. </el-form-item>
  62. <el-form-item label="发送状态" prop="SendStatus">
  63. <el-select v-model="state.queryParams.SendStatus" placeholder="请选择发送状态" @change="handleQuery" clearable>
  64. <el-option :value="1" label="成功" />
  65. <el-option :value="2" label="失败" />
  66. </el-select>
  67. </el-form-item>
  68. <el-form-item label="是否补领" prop="IsReplace">
  69. <el-select v-model="state.queryParams.IsReplace" placeholder="请选择是否补领" @change="handleQuery" clearable>
  70. <el-option :value="true" label="是" />
  71. <el-option :value="false" label="否" />
  72. </el-select>
  73. </el-form-item>
  74. <el-form-item label="发放时间" prop="ffTime">
  75. <el-date-picker
  76. v-model="state.queryParams.ffTime"
  77. type="datetimerange"
  78. unlink-panels
  79. range-separator="至"
  80. start-placeholder="开始时间"
  81. end-placeholder="结束时间"
  82. :shortcuts="shortcuts"
  83. @change="handleQuery"
  84. value-format="YYYY-MM-DD[T]HH:mm:ss"
  85. :default-time="defaultTimeStartEnd"
  86. />
  87. </el-form-item>
  88. </el-form>
  89. <template #footer>
  90. <el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
  91. <el-button @click="resetQuery(drawerRuleFormRef)" class="default-button"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
  92. </template>
  93. </el-drawer>
  94. </div>
  95. </template>
  96. <script lang="tsx" setup name="snapshotReSendList">
  97. import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
  98. import { FormInstance } from 'element-plus';
  99. import { defaultTimeStartEnd, shortcuts } from '@/utils/constants';
  100. import { getRedEnvelopeApprovalDetail } from '@/api/snapshot/reSend';
  101. import Other from '@/utils/other';
  102. import { centerDataListBasicData } from '@/api/snapshot/publish';
  103. // 引入组件
  104. const pagination = defineAsyncComponent(() => import('@/components/ProTable/components/Pagination.vue')); // 分页
  105. const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
  106. // 定义变量内容
  107. const state = reactive<any>({
  108. loading: false,
  109. queryParams: {
  110. // 查询参数
  111. PageIndex: 1,
  112. PageSize: 20,
  113. ffTime: [],
  114. Status: 1, // 发送状态
  115. IndustryId: null, // 行业类型
  116. UserType: null, // 用户类型
  117. OpenId: null, // 用户openid
  118. SendStatus: null, // 发送状态
  119. IsReceive: null, // 是否领取
  120. IsReplace: null, // 是否补领
  121. },
  122. total: 0, // 总条数
  123. });
  124. const gridOptions = reactive<any>({
  125. loading: false,
  126. border: true,
  127. showOverflow: true,
  128. columnConfig: {
  129. resizable: true,
  130. },
  131. scrollY: {
  132. enabled: true,
  133. gt: 100,
  134. },
  135. toolbarConfig: {
  136. zoom: true,
  137. custom: true,
  138. refresh: {
  139. queryMethod: () => {
  140. handleQuery();
  141. },
  142. },
  143. },
  144. customConfig: {
  145. storage: true,
  146. },
  147. id: 'snapshotReSendList',
  148. rowConfig: { isHover: true, height: 30, isCurrent: true, useKey: true },
  149. height: 'auto',
  150. columns: [
  151. {
  152. field: 'name',
  153. title: '工单编码',
  154. slots: { default: 'order_detail' },
  155. },
  156. {
  157. field: 'citizenReadPackAmountTxt',
  158. title: '发放用户类型',
  159. },
  160. {
  161. field: 'guiderReadPackAmountTxt',
  162. title: '行业',
  163. },
  164. {
  165. field: 'displayOrder',
  166. title: '用户openID',
  167. },
  168. {
  169. field: 'citizenReadPackAmountTxt',
  170. title: '商户订单号',
  171. },
  172. {
  173. field: 'citizenReadPackAmountTxt',
  174. title: '金额',
  175. },
  176. {
  177. field: 'citizenReadPackAmountTxt',
  178. title: '发放时间',
  179. // formatter: 'formatDate',
  180. },
  181. {
  182. field: 'citizenReadPackAmountTxt',
  183. title: '发送状态',
  184. },
  185. {
  186. field: 'citizenReadPackAmountTxt',
  187. title: '领取状态',
  188. },
  189. {
  190. field: 'citizenReadPackAmountTxt',
  191. title: '领取操作时间',
  192. // formatter: 'formatDate',
  193. },
  194. {
  195. field: 'displayOrder',
  196. title: '备注',
  197. minWidth: 200,
  198. },
  199. ],
  200. data: [],
  201. });
  202. /** 搜索按钮操作 节流操作 */
  203. const handleQuery = () => {
  204. state.queryParams.PageIndex = 1;
  205. queryList();
  206. };
  207. // 获取参数列表
  208. const requestParams = ref<EmptyObjectType>({});
  209. const queryList = () => {
  210. state.loading = true;
  211. gridOptions.loading = true;
  212. requestParams.value = Other.deepClone(state.queryParams);
  213. getRedEnvelopeApprovalDetail(requestParams.value)
  214. .then((res) => {
  215. state.loading = false;
  216. gridOptions.data = res.result.items ?? [];
  217. state.total = res.result.total ?? 0;
  218. gridOptions.loading = false;
  219. })
  220. .finally(() => {
  221. state.loading = false;
  222. gridOptions.loading = false;
  223. });
  224. };
  225. // 重置表单
  226. const drawerRuleFormRef = ref<RefType>();
  227. const ruleFormRef = ref<any>(null); // 表单ref
  228. const drawer = ref(false);
  229. const resetQuery = (formEl: FormInstance | undefined) => {
  230. if (!formEl) return;
  231. formEl.resetFields();
  232. ruleFormRef.value?.resetFields();
  233. queryList();
  234. };
  235. const industry = ref<EmptyArrayType>([]);
  236. const getBaseData = async () => {
  237. try {
  238. const { result } = await centerDataListBasicData();
  239. industry.value = result.industry;
  240. } catch (e) {
  241. console.log(e);
  242. }
  243. };
  244. // 页面加载时
  245. onMounted(() => {
  246. queryList();
  247. getBaseData();
  248. });
  249. </script>
  250. layout/routerView/parer