index.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. <template>
  2. <!-- 分销申请审批 -->
  3. <div class="taskMessagePage flex-col">
  4. <s-header :name="$t('taskMessage.distributionApplicationApproval')" :noback="false"></s-header>
  5. <div class="taskMessageBox flex-col">
  6. <van-list v-model:loading="loading" v-model:error="error" :error-text="$t('common.reqFailClkReload')"
  7. :finished="finished" :finished-text="$t('common.noMoreTxt')" offset="300" :immediate-check="false" @load="onLoad">
  8. <div class="searchRow flex-row justify-between">
  9. <div class="flex-col">
  10. <div class="flex-row justify-between bd3">
  11. <div class="flex-col outer4 proportionIcon"></div>
  12. <span class="flex-col txt2">{{ $t('taskMessage.total') }}<span class="discountNumber">{{ alarmHistoryTotal
  13. }}</span>{{ $t('taskMessage.recordsInTotal') }}</span>
  14. </div>
  15. </div>
  16. <div class="l-flex-RC">
  17. <div @click="reviewedClk" class="label3 o-mr-10">{{
  18. $t('taskMessage.toViewAppro')
  19. }}</div>
  20. <div @click="noticeClk" class="main5 l-flex-RC">
  21. <img class="label2 o-mr-5" src="../../../assets/device/searchIcon.png" />
  22. </div>
  23. </div>
  24. </div>
  25. <div class="listBox">
  26. <div v-for="(item, index) in alarmHistoryList" :key="index" class="listItem">
  27. <div class="itemBox">
  28. <div class="itemRow">
  29. <span class="itemTitle">{{ $t('taskMessage.equipmentName') }}:&nbsp;</span>
  30. {{ item.equipmentName != null ? item.equipmentName : item.clientId.slice(-6) }}
  31. </div>
  32. <div class="itemRow">
  33. <span class="itemTitle">{{ $t('taskMessage.equipmentNo') }}:&nbsp;</span>
  34. {{ item.clientId }}
  35. </div>
  36. <!-- 机主的 -->
  37. <div class="itemRow">
  38. <span class="itemTitle">{{ $t('taskMessage.owner') }}:&nbsp;</span>
  39. {{ $t('taskMessage.machineOwner') }}
  40. <span class="itemTitle discount">{{ $t('taskMessage.proportion') }}:&nbsp;</span>
  41. {{ item.proportion }}%
  42. </div>
  43. <!-- 平台的 -->
  44. <div class="itemRow">
  45. <span class="itemTitle">{{ $t('taskMessage.platform') }}:&nbsp;</span>
  46. {{ $t('taskMessage.platformAccount') }}
  47. <span class="itemTitle discount">{{ $t('taskMessage.proportion') }}:&nbsp;</span>
  48. {{ item.adminProportion }}%
  49. </div>
  50. <!-- 分账方的 -->
  51. <div class="itemRow" v-if="item.type >= 1">
  52. <span class="itemTitle">{{ $t('taskMessage.partners') }}:&nbsp;</span>
  53. {{ item.agencyName }}
  54. <span class="itemTitle discount">{{ $t('taskMessage.proportion') }}:&nbsp;</span>
  55. {{ item.agencyProportion }}%
  56. </div>
  57. <!-- 分账方4个 -->
  58. <div class="itemRow" v-if="item.type >= 2">
  59. <span class="itemTitle">{{ $t('taskMessage.partners') }}:&nbsp;</span>
  60. {{ item.merchantName }}
  61. <span class="itemTitle discount">{{ $t('taskMessage.proportion') }}:&nbsp;</span>
  62. {{ item.merchantProportion }}%
  63. </div>
  64. <!-- 分账方5个以上 -->
  65. <div class="itemRow" v-if="item.type >= 3">
  66. <span class="itemTitle">{{ $t('taskMessage.partners') }}:&nbsp;</span>
  67. {{ item.personageNam }}
  68. <span class="itemTitle discount">{{ $t('taskMessage.proportion') }}:&nbsp;</span>
  69. {{ item.personageProportion }}%
  70. </div>
  71. <div class="itemRow">
  72. <span class="itemTitle">{{ $t('taskMessage.applicationTime') }}:&nbsp;</span>
  73. {{ showDateTime(item.createDate) }}
  74. </div>
  75. <div class="itemRow" v-if="item.checkType !== '0'">
  76. <span class="itemTitle">{{ $t('taskMessage.approvalTime') }}:&nbsp;</span>
  77. {{ showDateTime(item.modifyDate) }}
  78. </div>
  79. <div class="itemRow" style="display: flex; justify-content: flex-end"
  80. v-if="item.checkType === '0' && isOper">
  81. <van-button span="5" round type="primary" style="
  82. height: 2em;
  83. padding: 0 1em;
  84. margin: 0 0.5em;
  85. background: rgb(255 0 0 / 20%);
  86. color: #ff0000;
  87. border-color: #ff0000;
  88. " @click="changeStatusFun(item, 3)">
  89. {{ $t('taskMessage.fail') }}
  90. </van-button>
  91. <van-button span="5" round type="primary" style="
  92. height: 2em;
  93. padding: 0 1em;
  94. margin: 0 0.5em;
  95. background: rgb(25 137 250 / 20%);
  96. color: #1989fa;
  97. " @click="changeStatusFun(item, 1)">
  98. {{ $t('taskMessage.adopt') }}
  99. </van-button>
  100. </div>
  101. <div class="itemRow" style="display: flex; justify-content: flex-end">
  102. <span v-if="item.checkType === '0' && user.type > 1" style="color: #FFA500"> {{ $t('taskMessage.toBeApproved') }}</span>
  103. <span v-if="item.checkType === '1'" style="color: #1989fa"> {{ $t('taskMessage.adopt') }}</span>
  104. <span v-if="item.checkType === '2'" style="color: #ff0033"> {{ $t('taskMessage.cancel') }}</span>
  105. <span v-if="item.checkType === '3'" style="color: #ff0000"> {{ $t('taskMessage.fail') }}</span>
  106. </div>
  107. </div>
  108. </div>
  109. </div>
  110. </van-list>
  111. </div>
  112. <!-- 筛选弹窗 -->
  113. <kDialog :dialogTitle="$t('taskMessage.equipmentInit.searchPop.title')"
  114. :confirmBtnTxt="$t('taskMessage.equipmentInit.searchPop.filterBtn')" ref="kDialogRef" @confirmclk="confirmClk">
  115. <template #content>
  116. <div class="cust_vantBorder">
  117. <van-field clearable v-model="searchForm.merchantName" :placeholder="$t('taskMessage.equipmentInit.searchPop.merchantNamePlace')
  118. " :label="$t('taskMessage.equipmentInit.searchPop.merchantName')" />
  119. <van-field @click-input="busiInpClk" readonly clearable v-model="searchForm.stateName"
  120. :placeholder="$t('taskMessage.equipmentInit.searchPop.statePlace')"
  121. :label="$t('taskMessage.equipmentInit.searchPop.state')">
  122. <template #right-icon>
  123. <div class="l-flex-RC">
  124. <van-icon v-if="searchForm.stateName" @click="searchForm.stateName = ''; searchForm.state = ''"
  125. class="o-mr-6" name="clear" />
  126. <van-icon @click="busiInpClk" name="arrow-down" />
  127. </div>
  128. </template>
  129. </van-field>
  130. </div>
  131. </template>
  132. </kDialog>
  133. <!-- 状态选择框 -->
  134. <van-popup v-model:show="busiPopShow" position="bottom">
  135. <van-picker :title="$t('taskMessage.equipmentInit.searchPop.statePlace')" :columns="busiPopList"
  136. :columns-field-names="busiPopFieldName" @confirm="busiPopConfirm" @cancel="busiPopShow = false" />
  137. </van-popup>
  138. </div>
  139. </template>
  140. <script>
  141. import { onMounted, reactive, ref } from "vue";
  142. import sHeader from "@/components/SimpleHeader";
  143. import {
  144. getTaskProportionList,
  145. changeProportionStatus,
  146. } from "@/service/taskMessage";
  147. import { showFailToast } from "vant";
  148. import { getLoginUser, styleUrl } from "@/common/js/utils";
  149. import dateUtil from "@/utils/dateUtil";
  150. import kDialog from "@/components/commom/kDialog/index.vue";
  151. import { useI18n } from "vue-i18n";
  152. export default {
  153. components: { sHeader, kDialog },
  154. setup() {
  155. const { t } = useI18n();
  156. // 筛选弹窗
  157. const busiPopList = reactive([
  158. {
  159. name: t('taskMessage.whole'),
  160. id: "1",
  161. },
  162. {
  163. name: t('taskMessage.unapproved'),
  164. id: "0",
  165. },
  166. ]);
  167. const busiPopFieldName = reactive({
  168. text: "name",
  169. value: "id",
  170. });
  171. const kDialogRef = ref(null);
  172. const busiPopShow = ref(false);
  173. // 筛选条件
  174. const searchForm = reactive({
  175. merchantName: "",
  176. state: "",
  177. stateName: '',
  178. });
  179. // 点击状态输入框
  180. const busiInpClk = () => {
  181. busiPopShow.value = true;
  182. };
  183. const busiPopConfirm = ({ selectedOptions }) => {
  184. busiPopShow.value = false;
  185. searchForm.state = selectedOptions[0].id;
  186. searchForm.stateName = selectedOptions[0].name;
  187. };
  188. // 点击筛选
  189. const noticeClk = () => {
  190. kDialogRef.value.openDialog();
  191. };
  192. // 点击查询按钮
  193. const confirmClk = () => {
  194. isClkReview.value = false;
  195. searchGetList();
  196. };
  197. // 是否点击待审核
  198. const isClkReview = ref(true);
  199. // 点击查看待审核
  200. const reviewedClk = () => {
  201. isClkReview.value = true;
  202. // 改为未审核状态
  203. searchParams.type = "0";
  204. searchGetList();
  205. };
  206. const user = getLoginUser();
  207. const loading = ref(false); // 加载状态
  208. const error = ref(false); // 错误状态
  209. const finished = ref(false); // 结束翻页状态
  210. const alarmHistoryList = ref([]); // 列表集合
  211. const alarmHistoryTotal = ref(0); // 列表总数
  212. let searchParams = reactive({
  213. adminId: "", // 当前登录账户的id
  214. type: "1", // 审核状态 未审核_0;全部_1
  215. current: 1, // 当前页
  216. size: 20, // 页大小
  217. username: "", // 商家名称
  218. });
  219. // 滚动加载
  220. const onLoad = () => {
  221. if (!finished.value) {
  222. searchParams.current = searchParams.current + 1;
  223. getList();
  224. }
  225. };
  226. // 查询列表
  227. const searchGetList = () => {
  228. alarmHistoryList.value = [];
  229. searchParams.current = 1;
  230. getList();
  231. };
  232. // 获取设备初始化审批列表数据
  233. const getList = async () => {
  234. // 把弹窗的筛选条件组合到请求参数里面
  235. if (!isClkReview.value) {
  236. searchParams.type = searchForm.state;
  237. }
  238. searchParams.userName = searchForm.merchantName;
  239. const { data } = await getTaskProportionList(
  240. Object.assign({}, searchParams)
  241. );
  242. if (data.code === "00000") {
  243. // 列表值叠加
  244. alarmHistoryList.value = alarmHistoryList.value.concat(
  245. data.data.records
  246. );
  247. alarmHistoryTotal.value = data.data.total;
  248. if (alarmHistoryList.value.length === data.data.total) {
  249. finished.value = true;
  250. }
  251. loading.value = false;
  252. console.log(alarmHistoryList);
  253. } else {
  254. showFailToast(data.message);
  255. }
  256. };
  257. // 是否有操作的权限
  258. const isOper = ref(true);
  259. // 初始化页面获取列表
  260. onMounted(async () => {
  261. // 加载样式
  262. styleUrl('taskMessage');
  263. if (user) {
  264. searchParams.adminId = user.id;
  265. searchGetList();
  266. // 如果是type大于1,那么不能有操作的权限
  267. if (user.type > 1) {
  268. isOper.value = false;
  269. }
  270. }
  271. });
  272. const showDateTime = (date) => {
  273. return date
  274. ? dateUtil.formateDate(new Date(date), "yyyy/MM/dd hh:mm:ss")
  275. : "";
  276. };
  277. const changeStatusFun = async (item, type) => {
  278. const { data } = await changeProportionStatus({
  279. id: item.id,
  280. type: type,
  281. });
  282. if (data.code === "00000") {
  283. showFailToast("操作成功");
  284. searchGetList();
  285. } else {
  286. showFailToast(data.message);
  287. }
  288. console.log(data);
  289. };
  290. return {
  291. loading,
  292. error,
  293. finished,
  294. onLoad,
  295. alarmHistoryList,
  296. alarmHistoryTotal,
  297. showDateTime,
  298. changeStatusFun,
  299. kDialogRef,
  300. noticeClk,
  301. confirmClk,
  302. busiInpClk,
  303. busiPopConfirm,
  304. busiPopShow,
  305. searchForm,
  306. busiPopList,
  307. busiPopFieldName,
  308. reviewedClk,
  309. isOper,
  310. user,
  311. };
  312. },
  313. };
  314. </script>
  315. <style lang="less" scoped>
  316. @import "../../../common/style/common.less";
  317. </style>