VisitSummaryMy.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. <template>
  2. <div class="bgcolor VisitSummaryMy">
  3. <!-- 顶部条-->
  4. <van-nav-bar
  5. class="navBar"
  6. title="家装推广会历史提报查询"
  7. left-arrow
  8. @click-left="onClickLeft" />
  9. <div class="container contentpd16">
  10. <van-row gutter="20">
  11. <van-col span="12">
  12. <van-cell :title="formData.startTime" is-link @click="StartTimeClick">
  13. <template #right-icon>
  14. <van-icon :name="timeico" class="search-icon" />
  15. </template>
  16. </van-cell>
  17. </van-col>
  18. <van-col span="12">
  19. <van-cell :title="formData.endTime" is-link @click="EndTimeClick">
  20. <template #right-icon>
  21. <van-icon :name="timeico" class="search-icon" />
  22. </template>
  23. </van-cell>
  24. </van-col>
  25. <van-col span="24">
  26. <van-cell class="inputSearch">
  27. <van-field v-model="formData.summaryTaskName" placeholder="请输入任务名称" />
  28. </van-cell>
  29. </van-col>
  30. </van-row>
  31. <br />
  32. <van-button type="info" size="small" plain class="Btn100" @click="searchBtn">查找</van-button>
  33. </div>
  34. <div class="container">
  35. <van-list
  36. v-model="loading"
  37. :finished="finished"
  38. @load="onLoad"
  39. finished-text="--已经到底了--">
  40. <div class="cellcontent brud" v-for="(item, index) in list" :key="index">
  41. <van-cell>
  42. <div class="cardContent" @click="dailyFn(item)">
  43. <div class="title">
  44. <p class="textLeft">{{ item.nickName }}的{{ item.summaryTaskName }}</p>
  45. </div>
  46. <div class="info">提交时间:{{ item.createTime }}</div>
  47. </div>
  48. <div class="approvalStatusBtn" v-if="item.approvalStatus">
  49. <van-button type="primary" size="small" v-if="item.approvalStatus == '2'"
  50. >审批通过</van-button
  51. >
  52. <van-button type="info" size="small" v-if="item.approvalStatus == '1'"
  53. >提交待审批</van-button
  54. >
  55. <van-button color="red" size="small" v-if="item.approvalStatus == '3'"
  56. >拒绝待提交</van-button
  57. >
  58. </div>
  59. </van-cell>
  60. </div>
  61. <van-empty v-if="list.length == 0" />
  62. </van-list>
  63. </div>
  64. <br />
  65. <br />
  66. <van-popup v-model="StartTimeShow" capture position="bottom">
  67. <van-datetime-picker
  68. v-model="strtcurrentDate"
  69. type="date"
  70. title="选择查找开始时间"
  71. :min-date="strtminDate"
  72. :max-date="strtmaxDate"
  73. @confirm="onStartTimeConfirm"
  74. @cancel="StartTimeShow = false" />
  75. </van-popup>
  76. <van-popup v-model="EndTimeShow" capture position="bottom">
  77. <van-datetime-picker
  78. v-model="endcurrentDate"
  79. type="date"
  80. title="选择查找结束时间"
  81. :min-date="endminDate"
  82. :max-date="endmaxDate"
  83. @confirm="onEndTimeConfirm"
  84. @cancel="EndTimeShow = false" />
  85. </van-popup>
  86. </div>
  87. </template>
  88. <script>
  89. import timeico from '@/assets/Icon/datatims.png';
  90. import { getDeptInfo, getSummaryMobileDeptInfo, queryHistorySummaryList } from '@/api/index';
  91. export default {
  92. name: 'MyHistoricalWeekly',
  93. data() {
  94. return {
  95. timeico: timeico,
  96. StartTimeShow: false,
  97. EndTimeShow: false,
  98. strtminDate: new Date(2022, 0, 1),
  99. endminDate: new Date(2022, 0, 1),
  100. strtmaxDate: new Date(),
  101. endmaxDate: new Date(),
  102. strtcurrentDate: new Date(),
  103. endcurrentDate: new Date(),
  104. list: [],
  105. loading: false,
  106. finished: true,
  107. formData: {
  108. type: '1', // 汇报类型或入口 1-下属业务员日报 2-下属销售部主管周报 3-下属大区主管半月报
  109. startTime: '', // 开始时间,必传 格式:yyyy-MM-dd String类型
  110. endTime: '', // 结束时间,必传 格式:yyyy-MM-dd String类型
  111. pageNum: 1, // 当前页码 int类型
  112. pageSize: 10, // 当前每页条数 int类型
  113. },
  114. tableList: [],
  115. };
  116. },
  117. created() {
  118. this.userList = [];
  119. this.formData.startTime = this.getThreeDaysAgo();
  120. this.strtcurrentDate = new Date(this.getThreeDaysAgo());
  121. this.formData.endTime = this.parseTime(new Date(), '{y}-{m}-{d}') + '';
  122. this.endminDate = new Date(this.GetPreMonthDay(this.parseTime(new Date(), '{y}-{m}-{d}'), 2));
  123. this.searchBtn();
  124. },
  125. watch: {
  126. $route(to, from) {},
  127. },
  128. methods: {
  129. dateFn(val) {
  130. return val.slice(0, 4) + '-' + val.slice(4, 6) + '-' + val.slice(6, 8);
  131. },
  132. onLoad() {
  133. this.querySubReport();
  134. },
  135. searchBtn() {
  136. this.formData.pageNum = 1;
  137. this.list = [];
  138. this.querySubReport();
  139. },
  140. querySubReport() {
  141. let loading1 = this.$toast.loading({
  142. duration: 0,
  143. message: '加载中...',
  144. forbidClick: true,
  145. });
  146. if (this.refreshing) {
  147. this.list = [];
  148. this.refreshing = false;
  149. }
  150. queryHistorySummaryList(this.formData).then((res) => {
  151. loading1.clear();
  152. if (res.code == 200) {
  153. this.loading = false;
  154. this.list = this.list.concat(res.data);
  155. if (this.list.length >= res.total) {
  156. this.finished = true;
  157. } else {
  158. this.finished = false;
  159. }
  160. this.formData.pageNum = this.formData.pageNum + 1;
  161. }
  162. });
  163. },
  164. getThreeDaysAgo() {
  165. let myDate = new Date();
  166. let lw = new Date(myDate - 1000 * 60 * 60 * 24 * 7); //最后一个数字30可改,30天的意思
  167. let lastY = lw.getFullYear();
  168. let lastM = lw.getMonth() + 1;
  169. let lastD = lw.getDate();
  170. let startData =
  171. lastY + '-' + (lastM < 10 ? '0' + lastM : lastM) + '-' + (lastD < 10 ? '0' + lastD : lastD); //三十天之前日期
  172. return startData;
  173. },
  174. GetPreMonthDay(date, monthNum, type) {
  175. var dateArr = date.split('-');
  176. var year = dateArr[0]; //获取当前日期的年份
  177. var month = dateArr[1]; //获取当前日期的月份
  178. var day = dateArr[2]; //获取当前日期的日
  179. var days = new Date(year, month, 0);
  180. days = days.getDate(); //获取当前日期中月的天数
  181. var year2 = year;
  182. var month2 = parseInt(month) - monthNum;
  183. if (month2 <= 0) {
  184. var absM = Math.abs(month2);
  185. year2 = parseInt(year2) - Math.ceil(absM / 12 == 0 ? 1 : parseInt(absM) / 12);
  186. month2 = 12 - (absM % 12);
  187. }
  188. var day2 = day;
  189. var days2 = new Date(year2, month2, 0);
  190. days2 = days2.getDate();
  191. if (day2 > days2) {
  192. day2 = days2;
  193. }
  194. if (month2 < 10) {
  195. month2 = '0' + month2;
  196. }
  197. var t2 = '';
  198. if (monthNum > 0) {
  199. t2 = year2 + '-' + month2 + '-01';
  200. } else {
  201. if (type == 'end') {
  202. var Months = new Date().getMonth() + 1;
  203. var days111 = new Date().getDate();
  204. if (Months < 10) {
  205. Months = '0' + Months;
  206. }
  207. if (days111 < 10) {
  208. days111 = '0' + days111;
  209. }
  210. if (new Date().getFullYear() == year) {
  211. if (parseInt(month2) >= new Date().getMonth() + 1) {
  212. t2 = year2 + '-' + Months + '-' + days111;
  213. } else {
  214. var daysd = this.getMonthDays(year2, month2);
  215. t2 = year2 + '-' + month2 + '-' + daysd;
  216. }
  217. } else {
  218. var daysd = this.getMonthDays(year2, month2);
  219. t2 = year2 + '-' + month2 + '-' + daysd;
  220. }
  221. } else {
  222. t2 = year2 + '-' + month2 + '-' + day2;
  223. }
  224. }
  225. return t2;
  226. },
  227. getMonthDays(year, month) {
  228. var stratDate = new Date(year, month - 1, 1),
  229. endData = new Date(year, month, 1);
  230. var days = (endData - stratDate) / (1000 * 60 * 60 * 24);
  231. return days;
  232. },
  233. dailyFn(row) {
  234. this.$router.push({
  235. path: '/VisitSummaryDetail',
  236. query: { userSummaryId: row.userSummaryId },
  237. });
  238. },
  239. onClickLeft() {
  240. this.$router.go(-1);
  241. },
  242. StartTimeClick() {
  243. this.StartTimeShow = true;
  244. },
  245. EndTimeClick() {
  246. this.EndTimeShow = true;
  247. },
  248. onStartTimeConfirm(val) {
  249. this.formData.startTime = this.parseTime(new Date(val), '{y}-{m}-{d}') + '';
  250. this.StartTimeShow = false;
  251. this.endminDate = new Date(val);
  252. this.endmaxDate = new Date(this.GetPreMonthDay(this.formData.startTime, -2, 'end'));
  253. if (
  254. new Date(this.formData.startTime).getTime() > new Date(this.formData.endTime).getTime() ||
  255. new Date(this.endmaxDate).getTime() < new Date(this.formData.endTime).getTime()
  256. ) {
  257. this.formData.endTime = this.parseTime(new Date(val), '{y}-{m}-{d}') + '';
  258. this.endcurrentDate = this.GetPreMonthDay(this.formData.startTime, -2);
  259. }
  260. },
  261. onEndTimeConfirm(val) {
  262. this.formData.endTime = this.parseTime(new Date(val), '{y}-{m}-{d}');
  263. this.strtmaxDate = new Date(val);
  264. if (new Date(this.formData.startTime).getTime() > new Date(this.formData.endTime).getTime()) {
  265. this.formData.startTime = this.formData.endTime;
  266. }
  267. this.EndTimeShow = false;
  268. },
  269. },
  270. };
  271. </script>
  272. <style>
  273. .cardContent {
  274. padding: 0;
  275. box-sizing: border-box;
  276. }
  277. .cardContent .title {
  278. font-size: 15px;
  279. font-weight: bold;
  280. color: #333;
  281. line-height: 22px;
  282. }
  283. .cardContent .title p {
  284. padding: 0;
  285. margin: 0;
  286. }
  287. .cardContent .title .textLeft {
  288. display: inline-block;
  289. padding-bottom: 10px;
  290. }
  291. .cardContent .title .textRight {
  292. float: right;
  293. color: #0057ba;
  294. }
  295. .cardContent .info {
  296. font-size: 14px;
  297. color: #666;
  298. line-height: 26px;
  299. }
  300. .search-icon {
  301. font-size: 16px;
  302. line-height: inherit;
  303. margin-top: 4px;
  304. }
  305. .brud {
  306. margin: 16px;
  307. border-radius: 8px;
  308. overflow: hidden;
  309. }
  310. .contentpd16 {
  311. padding: 16px;
  312. background-color: white;
  313. }
  314. .Btn100 {
  315. margin: 0 auto 10px;
  316. display: block;
  317. width: 100%;
  318. border-radius: 5px;
  319. color: #fff !important;
  320. background-color: #0057ba;
  321. border: 1px solid #0057ba;
  322. height: 36px;
  323. }
  324. .contentpd16 .van-cell {
  325. background-color: #ebf4ff;
  326. margin: 8px 0;
  327. border-radius: 5px;
  328. padding: 4px 16px;
  329. }
  330. .elTreeTableLsiy th.el-table__cell > .cell {
  331. text-align: center;
  332. }
  333. .elTreeTableLsiy td.el-table__cell div {
  334. text-align: right;
  335. }
  336. .elTreeTableLsiy .el-table__cell {
  337. padding: 2px 0;
  338. }
  339. .elTreeTableLsiy .el-table__cell:first-child .cell {
  340. text-align: center;
  341. }
  342. .contentpd16 .inputSearch .van-cell {
  343. padding: 0;
  344. margin: 4px 0;
  345. }
  346. </style>
  347. <style scoped lang="scss">
  348. .VisitSummaryMy {
  349. .brud {
  350. position: relative;
  351. }
  352. .approvalStatusBtn {
  353. position: absolute;
  354. bottom: 4px;
  355. right: 1px;
  356. .van-button {
  357. border-radius: 5px;
  358. width: 78px;
  359. }
  360. }
  361. }
  362. </style>