VisitSummaryAdd.vue 38 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189
  1. <template>
  2. <div class="bgcolor VisitSummaryAdd">
  3. <div class="navBarTOP">
  4. <van-nav-bar class="navBar" left-arrow :title="title" @click-left="onClickLeft" />
  5. </div>
  6. <!-- 主体内容-->
  7. <div class="lineGrey"></div>
  8. <div class="lineGrey"></div>
  9. <div class="lineGrey"></div>
  10. <div class="lineGrey"></div>
  11. <div class="lineGrey"></div>
  12. <div class="lineGrey" style="height: 6px"></div>
  13. <div class="container" style="width: 94%; margin: 0px auto; border-radius: 6px">
  14. <van-form ref="tabstoreVal" class="QRCodeActivity">
  15. <van-field
  16. v-model="activityForm.name"
  17. name="活动名称"
  18. label="活动名称"
  19. placeholder="请输入活动名称"
  20. :rules="[{ required: true, message: '请输入活动名称' }]" />
  21. </van-form>
  22. <van-form ref="tabstoreVal">
  23. <div v-for="(item, index) in collectionItemList" :key="index">
  24. <div v-if="item.answerType == 'sz'" class="formLabel z-cell">
  25. <van-cell>
  26. <template #title>
  27. <span v-if="item.isMust == 0" class="van-f-red">*</span>
  28. {{ 1 + index + '.' }}
  29. {{ item.customName }}
  30. </template>
  31. </van-cell>
  32. <van-field
  33. v-model="item.answerValue"
  34. :placeholder="item.remark"
  35. type="number"
  36. @input="numberFn(item, index)"></van-field>
  37. <!-- <p style="color: #444; font-size: 12px; margin: 0; padding: 10px 0; text-align: right">
  38. {{ item.remark }}
  39. </p> -->
  40. </div>
  41. <div v-if="item.answerType == 'rq'" class="formLabel z-cell">
  42. <van-cell>
  43. <template #title>
  44. <span v-if="item.isMust == 0" class="van-f-red">*</span>
  45. {{ 1 + index + '.' }}
  46. {{ item.customName }}
  47. </template>
  48. </van-cell>
  49. <van-field
  50. v-model="item.answerValue"
  51. clickable
  52. name="calendar"
  53. placeholder="点击选择日期"
  54. readonly
  55. @click="showCalendarClick(index)" />
  56. <p style="color: #444; font-size: 12px; margin: 0; padding: 10px 0; text-align: right">
  57. {{ item.remark }}
  58. </p>
  59. </div>
  60. <div v-if="item.answerType == 'zp'" class="formLabel z-cell">
  61. <van-cell>
  62. <template #title>
  63. <span v-if="item.isMust == 0" class="van-f-red">*</span>
  64. {{ 1 + index + '.' }}
  65. {{ item.customName }}
  66. </template>
  67. </van-cell>
  68. <van-row gutter="10" style="margin-bottom: 10px">
  69. <p style="margin-top: 0">
  70. <span style="font-size: 12px; color: #888">{{ item.remark }}</span>
  71. </p>
  72. <delete-upload-img :imgs="item.fileInfoList" :isDelete="false"></delete-upload-img>
  73. <upload-img
  74. :uploadid="uploadid2"
  75. @newimgarr="newimgarr1"
  76. imgText="上传照片"
  77. :indexImg="index"
  78. :customId="item.customId"
  79. :summaryId="item.summaryId"
  80. :item="item"
  81. @click="imgClick(item, index)"></upload-img>
  82. </van-row>
  83. </div>
  84. <div v-if="item.answerType == 'wb'" class="formLabel z-cell">
  85. <van-cell>
  86. <template #title>
  87. <span v-if="item.isMust == 0" class="van-f-red">*</span>
  88. {{ 1 + index + '.' }}
  89. {{ item.customName }}
  90. </template>
  91. </van-cell>
  92. <van-field
  93. v-model="item.answerValue"
  94. :formatter="formatter"
  95. autosize
  96. type="textarea"
  97. :placeholder="item.remark"></van-field>
  98. <!-- <p style="color: #444; font-size: 12px; margin: 0; padding: 10px 0; text-align: right">
  99. {{ item.remark }}
  100. </p> -->
  101. </div>
  102. <div v-if="item.answerType == 'gs'" class="formLabel z-cell" @click="regionClick(index)">
  103. <van-cell>
  104. <template #title>
  105. <span v-if="item.isMust == 0" class="van-f-red">*</span>
  106. {{ 1 + index + '.' }}
  107. {{ item.customName }}
  108. </template>
  109. </van-cell>
  110. <van-field
  111. readonly
  112. v-model="item.answerName"
  113. :formatter="formatter"
  114. :placeholder="item.customName"></van-field>
  115. <p style="color: #444; font-size: 12px; margin: 0; padding: 10px 0; text-align: right">
  116. {{ item.remark }}
  117. </p>
  118. </div>
  119. <div
  120. v-if="item.answerType == 'dq'"
  121. class="formLabel z-cell"
  122. @click="SalesRegionClick(index)">
  123. <van-cell>
  124. <template #title>
  125. <span v-if="item.isMust == 0" class="van-f-red">*</span>
  126. {{ 1 + index + '.' }}
  127. {{ item.customName }}
  128. </template>
  129. </van-cell>
  130. <van-field
  131. readonly
  132. v-model="item.answerName"
  133. :formatter="formatter"
  134. :placeholder="item.customName"></van-field>
  135. <p style="color: #444; font-size: 12px; margin: 0; padding: 10px 0; text-align: right">
  136. {{ item.remark }}
  137. </p>
  138. </div>
  139. <div
  140. v-if="item.answerType == 'xsb'"
  141. class="formLabel z-cell"
  142. @click="SalesDepartmentClick(index)">
  143. <van-cell>
  144. <template #title>
  145. <span v-if="item.isMust == 0" class="van-f-red">*</span>
  146. {{ 1 + index + '.' }}
  147. {{ item.customName }}
  148. </template>
  149. </van-cell>
  150. <van-field
  151. readonly
  152. v-model="item.answerName"
  153. :formatter="formatter"
  154. :placeholder="item.customName"></van-field>
  155. <p style="color: #444; font-size: 12px; margin: 0; padding: 10px 0; text-align: right">
  156. {{ item.remark }}
  157. </p>
  158. </div>
  159. <div v-if="item.answerType == 'duox'" class="formLabel z-cell">
  160. <van-cell>
  161. <template #title>
  162. <span v-if="item.isMust == 0" class="van-f-red">*</span>
  163. {{ 1 + index + '.' }}
  164. {{ item.customName }}
  165. </template>
  166. </van-cell>
  167. <z-checkbox
  168. :answerType="item.answerType"
  169. :checkboxval="item.answerValue"
  170. :collectionType="item.customOptionList"
  171. :textc="item.customId"
  172. :zCheckboxcolumns="item.customOptionList"
  173. @zSelectVal="zSelectVal"></z-checkbox>
  174. </div>
  175. <div v-if="item.answerType == 'dx'" class="formLabel z-cell">
  176. <van-cell>
  177. <template #title>
  178. <span v-if="item.isMust == 0" class="van-f-red">*</span>
  179. {{ 1 + index + '.' }}
  180. {{ item.customName }}
  181. </template>
  182. </van-cell>
  183. <z-radio
  184. :answerType="item.answerType"
  185. :collectionType="item.collectionType"
  186. :radio="item.answerValue"
  187. :textc="item.customId"
  188. :zRadiocolumns="item.customOptionList"
  189. @zSelectVal="zSelectVal"></z-radio>
  190. </div>
  191. <div v-if="item.answerType == 'jxs'" class="formLabel z-cell">
  192. <van-cell>
  193. <template #title>
  194. <span v-if="item.isMust == 0" class="van-f-red">*</span>
  195. {{ 1 + index + '.' }}
  196. {{ item.customName }}
  197. </template>
  198. </van-cell>
  199. <div class="jxsBox">
  200. <div class="jxsContent">
  201. <div class="item" v-for="(val, index) in item.chainList">
  202. <el-popover
  203. placement="bottom"
  204. trigger="click"
  205. :content="val.chainName + '(' + val.chainCode + ')'">
  206. <template slot="reference">
  207. <div class="selectItem">{{ val.chainName }} &nbsp; ({{ val.chainCode }})</div>
  208. <van-icon name="clear" size="16" @click="closeJXS(item, index)" />
  209. </template>
  210. </el-popover>
  211. </div>
  212. </div>
  213. <div class="addJXS"><van-icon name="add-o" size="24" @click="addJXS" /></div>
  214. <div class="tips">{{ item.remark }}</div>
  215. </div>
  216. </div>
  217. <br />
  218. </div>
  219. </van-form>
  220. </div>
  221. <br />
  222. <div class="tc" style="padding: 0 16px">
  223. <van-button class="submitBtn" block type="primary" @click="onStorage"> 暂存 </van-button>
  224. <van-button class="submitBtn" block type="info" color="#0057ba" @click="onSubmit">
  225. 提交汇报
  226. </van-button>
  227. </div>
  228. <br />
  229. <van-calendar
  230. v-model="showCalendar"
  231. @confirm="onConfirm"
  232. color="#0057ba"
  233. :min-date="minDate"
  234. :max-date="maxDate"
  235. :show-confirm="false" />
  236. <van-popup v-model="RegionShow" capture position="bottom">
  237. <van-picker
  238. :columns="companyList"
  239. show-toolbar
  240. value-key="deptName"
  241. @cancel="RegionShow = false"
  242. @confirm="onregionConfirm" />
  243. </van-popup>
  244. <van-popup v-model="SalesRegionShow" capture position="bottom">
  245. <van-picker
  246. :columns="regionList"
  247. show-toolbar
  248. value-key="deptName"
  249. @cancel="SalesRegionShow = false"
  250. @confirm="onSalesRegionConfirm" />
  251. </van-popup>
  252. <van-popup v-model="SalesDepartmentShow" capture position="bottom">
  253. <van-picker
  254. :columns="deptList"
  255. show-toolbar
  256. value-key="deptName"
  257. @cancel="SalesDepartmentShow = false"
  258. @confirm="onSalesDepartmentConfirm" />
  259. </van-popup>
  260. <van-popup v-model="StartTimeShow" capture position="bottom">
  261. <van-datetime-picker
  262. v-model="strtcurrentDate"
  263. :max-date="strtmaxDate"
  264. :min-date="strtminDate"
  265. title="选择查找开始时间"
  266. type="date"
  267. @cancel="StartTimeShow = false"
  268. @confirm="onStartTimeConfirm" />
  269. </van-popup>
  270. <van-popup v-model="EndTimeShow" capture position="bottom">
  271. <van-datetime-picker
  272. v-model="endcurrentDate"
  273. :max-date="endmaxDate"
  274. :min-date="endminDate"
  275. title="选择查找结束时间"
  276. type="date"
  277. @cancel="EndTimeShow = false"
  278. @confirm="onEndTimeConfirm" />
  279. </van-popup>
  280. <!-- 经销商 -->
  281. <van-popup v-model="moreTypeShow" position="bottom">
  282. <van-row style="background-color: #f5f5f5">
  283. <van-col span="20">
  284. <van-field
  285. left-icon="search"
  286. style="margin-top: 2px; border-radius: 6px; overflow: hidden"
  287. v-model="agentValue"
  288. label=""
  289. placeholder="请输入关键词"
  290. clearable />
  291. </van-col>
  292. <van-col
  293. span="4"
  294. style="text-align: center; line-height: 48px"
  295. @click="getChainsList(agentValue)">
  296. <div style="background-color: #0057ba; color: #fff">搜索</div>
  297. </van-col>
  298. </van-row>
  299. <van-picker
  300. show-toolbar
  301. :columns="chainsData"
  302. value-key="chainName"
  303. @confirm="onConfirmChainsList"
  304. @cancel="moreTypeShow = false" />
  305. </van-popup>
  306. </div>
  307. </template>
  308. <script>
  309. import timeico from '@/assets/Icon/datatims.png';
  310. import {
  311. insertCustomAnswer,
  312. getSummaryDetailById,
  313. getDeptInfo,
  314. getSummaryMobileDeptInfo,
  315. getDeptsByUser,
  316. chainsList,
  317. temporarilyCustomAnswer,
  318. } from '@/api/index';
  319. import zRadio from '@/components/zRadio2';
  320. import zCheckbox from '@/components/zCheckbox2';
  321. // import uploadImg from "@/components/uo";
  322. import uploadImg from '@/components/uploadVTask';
  323. import deleteUploadImg from '@/components/deleteUploadImg2';
  324. export default {
  325. name: 'MyHistoricalWeekly',
  326. components: { zRadio, zCheckbox, uploadImg, deleteUploadImg },
  327. data() {
  328. return {
  329. timeico: timeico,
  330. RegionShow: false,
  331. SalesRegionShow: false,
  332. SalesDepartmentShow: false,
  333. StaffShow: false,
  334. StartTimeShow: false,
  335. dateIndex: '',
  336. EndTimeShow: false,
  337. uploadid2: 'uploadid2',
  338. PhotoTypeList: [{ text: '009', value: '09' }],
  339. strtminDate: new Date(2022, 0, 1),
  340. endminDate: new Date(2022, 0, 1),
  341. minDate: new Date(2020, 0, 1),
  342. maxDate: new Date(2090, 0, 31),
  343. strtmaxDate: new Date(),
  344. endmaxDate: new Date(),
  345. strtcurrentDate: new Date(),
  346. endcurrentDate: new Date(),
  347. companyName: '全部公司',
  348. deptName: '全部销售部',
  349. regionName: '全部大区',
  350. userName: '全部',
  351. companyCode: '',
  352. deptCode: '',
  353. regionCode: '',
  354. userCode: '',
  355. companyList: [],
  356. title: '',
  357. deptList: [],
  358. regionList: [],
  359. userList: [],
  360. deptForm: { type: '', parentId: '' },
  361. list: [],
  362. loading: false,
  363. finished: true,
  364. showCalendar: false,
  365. formData: {
  366. type: '2', // 汇报类型或入口 1-下属业务员日报 2-下属销售部主管周报 3-下属大区主管半月报
  367. companyId: '', // 公司id,必传 Long类型
  368. regionId: '', // 大区id,必传 Long类型
  369. deptId: '', // 部门id,如果为周报或日报为必传 Long类型
  370. userId: '', // 业务员id,如果为日报为必传 Long类型
  371. startTime: '', // 开始时间,必传 格式:yyyy-MM-dd String类型
  372. endTime: '', // 结束时间,必传 格式:yyyy-MM-dd String类型
  373. pageNum: 1, // 当前页码 int类型
  374. pageSize: 10, // 当前每页条数 int类型
  375. },
  376. tableList: [],
  377. collectionItemList: [],
  378. collectionAnswerlisd: [],
  379. flagclick: true,
  380. index: '',
  381. activaFlag: true,
  382. moreTypeShow: false,
  383. agentValue: '',
  384. chainsData: [],
  385. chainName: '',
  386. chainCode: '',
  387. jxsList: [],
  388. // 活动数据
  389. activityForm: {
  390. name: '',
  391. },
  392. };
  393. },
  394. created() {
  395. this.activaFlag = true;
  396. // this.formData.startTime = this.GetPreMonthDay(this.parseTime(new Date(), '{y}-{m}-{d}'),2)
  397. this.formData.startTime = this.getThreeDaysAgo();
  398. // this.strtcurrentDate=new Date(this.GetPreMonthDay(this.parseTime(new Date(), '{y}-{m}-{d}'),2))
  399. this.strtcurrentDate = new Date(this.getThreeDaysAgo());
  400. this.formData.endTime = this.parseTime(new Date(), '{y}-{m}-{d}') + '';
  401. this.endminDate = new Date(this.GetPreMonthDay(this.parseTime(new Date(), '{y}-{m}-{d}'), 2));
  402. this.powerGrade = localStorage.getItem('powerGrade');
  403. this.title = this.$route.query.title;
  404. this.getReportInfo();
  405. this.regionCode = '';
  406. },
  407. watch: {
  408. $route(to, from) {
  409. if (to.path == '/VisitSummaryAdd') {
  410. this.title = this.$route.query.title;
  411. this.getReportInfo();
  412. this.regionCode = '';
  413. }
  414. },
  415. },
  416. methods: {
  417. showCalendarClick(val) {
  418. this.dateIndex = val;
  419. this.showCalendar = true;
  420. },
  421. formatDate(date) {
  422. var Month = date.getMonth() + 1;
  423. var Day = date.getDate();
  424. if (Month < 10) {
  425. Month = '0' + Month;
  426. }
  427. if (Day < 10) {
  428. Day = '0' + Day;
  429. }
  430. return `${date.getFullYear()}-${Month}-${Day}`;
  431. },
  432. onConfirm(date) {
  433. this.showCalendar = false;
  434. this.collectionItemList[this.dateIndex].answerValue = this.formatDate(date);
  435. },
  436. formatter(value) {
  437. return value.replace(
  438. /[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF]|[0-9|*|#]\uFE0F\u20E3|[0-9|#]\u20E3|[\u203C-\u3299]\uFE0F\u200D|[\u203C-\u3299]\uFE0F|[\u2122-\u2B55]|\u303D|[\A9|\AE]\u3030|\uA9|\uAE|\u3030/gi,
  439. ''
  440. );
  441. },
  442. numberFn(val, index) {
  443. if (!/^[+-]?\d*\.{0,1}\d{0,1}$/.test(this.collectionItemList[index].answerValue)) {
  444. this.collectionItemList[index].answerValue = this.collectionItemList[
  445. index
  446. ].answerValue.replace(
  447. /\.\d{2,}$/,
  448. this.collectionItemList[index].answerValue.substr(
  449. this.collectionItemList[index].answerValue.indexOf('.'),
  450. 3
  451. )
  452. );
  453. }
  454. },
  455. zSelectVal(value) {
  456. var collectionAnswerlisd = this.collectionAnswerlisd;
  457. if (collectionAnswerlisd.length > 0) {
  458. var num = 0;
  459. for (var a = 0; a < collectionAnswerlisd.length; a++) {
  460. if (collectionAnswerlisd[a].id == value.id) {
  461. collectionAnswerlisd[a] = value;
  462. num = 0;
  463. } else {
  464. num = 1;
  465. }
  466. }
  467. if (num > 0) {
  468. collectionAnswerlisd.push(value);
  469. }
  470. } else {
  471. collectionAnswerlisd.push(value);
  472. }
  473. this.collectionAnswerlisd = collectionAnswerlisd;
  474. },
  475. imgClick(val, index) {
  476. this.collectionId = val.collectionId + '';
  477. this.indeximg = index;
  478. this.show = true;
  479. },
  480. newimgarr1() {
  481. this.$forceUpdate();
  482. // if (
  483. // this.collectionItemList[val.index].fileInfoList == null ||
  484. // this.collectionItemList[val.index].fileInfoList == undefined
  485. // ) {
  486. // this.collectionItemList[val.index].fileInfoList = [];
  487. // this.collectionItemList[val.index].fileIdList = [];
  488. // }
  489. // this.collectionItemList[val.index].fileInfoList.push(val);
  490. // this.collectionItemList[val.index].fileIdList.push(val.id);
  491. },
  492. dateFn(val) {
  493. return val.slice(0, 4) + '-' + val.slice(4, 6) + '-' + val.slice(6, 8);
  494. },
  495. onLoad() {},
  496. onSubmit() {
  497. this.setParams(() => {
  498. if (this.flagclick) {
  499. this.flagclick = false;
  500. this.timer = null;
  501. this.timer = setTimeout(() => {
  502. this.flagclick = true;
  503. }, 2000);
  504. insertCustomAnswer({
  505. userSummaryId: '', // Long 用户总结id,如果为新增则不填,编辑则必填
  506. summaryId: this.$route.query.summaryId, //Long 主管任务id
  507. customItemList: this.collectionItemList, //List<Object> 答案列表
  508. })
  509. .then((res) => {
  510. if (res.code == 200) {
  511. this.$router.go(-1);
  512. } else {
  513. this.$toast(res.msg);
  514. }
  515. })
  516. .catch((err) => {
  517. this.$toast(err.msg);
  518. });
  519. }
  520. });
  521. },
  522. setParams(callback) {
  523. for (var c = 0; c < this.collectionAnswerlisd.length; c++) {
  524. for (var b = 0; b < this.collectionItemList.length; b++) {
  525. if (this.collectionAnswerlisd[c].id == this.collectionItemList[b].customId) {
  526. this.collectionItemList[b].customOptionList = this.collectionAnswerlisd[c].value;
  527. }
  528. }
  529. }
  530. // // 照片
  531. let zpDataList = this.collectionItemList.find((item) => item.answerType == 'zp');
  532. if (zpDataList && zpDataList.fileInfoList) {
  533. let fileIdList = [];
  534. zpDataList.fileInfoList.forEach((item) => {
  535. fileIdList.push(item.id);
  536. });
  537. zpDataList.fileIdList = fileIdList;
  538. }
  539. // 经销商
  540. // let JXSSataList = this.collectionItemList.find((item) => item.answerType == 'jxs');
  541. // if (this.jxsList.length) {
  542. // let fileIdList = [];
  543. // this.jxsList.forEach((item) => {
  544. // fileIdList.push({
  545. // chainCode: item.chainCode,
  546. // chainName: item.chainName,
  547. // });
  548. // });
  549. // JXSSataList.chainList = fileIdList;
  550. // }
  551. callback && callback();
  552. },
  553. getReportInfo() {
  554. let loading1 = this.$toast.loading({
  555. duration: 0,
  556. message: '加载中...',
  557. forbidClick: true,
  558. });
  559. this.collectionItemList = [];
  560. this.collectionAnswerlisd = [];
  561. getSummaryDetailById({ summaryId: this.$route.query.summaryId }).then((res) => {
  562. loading1.clear();
  563. if (res.code == 200) {
  564. var collectionItemLists = res.data;
  565. for (var q = 0; q < collectionItemLists.length; q++) {
  566. collectionItemLists[q].answerName = undefined;
  567. // 公司
  568. if (
  569. (collectionItemLists[q].answerType == 'gs' ||
  570. collectionItemLists[q].answerType == 'dq' ||
  571. collectionItemLists[q].answerType == 'xsb') &&
  572. this.activaFlag
  573. ) {
  574. this.activaFlag = false;
  575. if (collectionItemLists[q].answerType == 'xsb') {
  576. this.getDeptsBy(collectionItemLists[q].answerValue);
  577. this.getDeptInfo(
  578. 'dept',
  579. collectionItemLists[q].answerType,
  580. collectionItemLists[q].answerValue
  581. );
  582. } else {
  583. this.getDeptInfo(
  584. 'dept',
  585. collectionItemLists[q].answerType,
  586. collectionItemLists[q].answerValue
  587. );
  588. }
  589. }
  590. // 单选
  591. if (
  592. collectionItemLists[q].answerType == 'dx' &&
  593. collectionItemLists[q].showHistory == '1'
  594. ) {
  595. let findCustom = collectionItemLists[q].customOptionList.find((item) => item.checked);
  596. if (findCustom) {
  597. collectionItemLists[q].answerValue = findCustom.customOptionId + '';
  598. }
  599. }
  600. // 多选
  601. if (
  602. collectionItemLists[q].answerType == 'duox' &&
  603. collectionItemLists[q].showHistory == '1'
  604. ) {
  605. let findCustom = [];
  606. collectionItemLists[q].customOptionList.forEach((item) => {
  607. if (item.checked) {
  608. findCustom.push(item.customOptionId + '');
  609. }
  610. });
  611. if (findCustom) {
  612. collectionItemLists[q].answerValue = findCustom.join(',');
  613. }
  614. }
  615. // 照片
  616. if (collectionItemLists[q].answerType == 'zp' && collectionItemLists[q].fileInfoList) {
  617. let fileIdList = [];
  618. collectionItemLists[q].fileInfoList.forEach((item) => {
  619. fileIdList.push(item.id);
  620. });
  621. collectionItemLists[q].fileIdList = fileIdList;
  622. }
  623. }
  624. this.collectionItemList = collectionItemLists;
  625. }
  626. });
  627. },
  628. getThreeDaysAgo() {
  629. let myDate = new Date();
  630. let lw = new Date(myDate - 1000 * 60 * 60 * 24 * 14); //最后一个数字30可改,30天的意思
  631. let lastY = lw.getFullYear();
  632. let lastM = lw.getMonth() + 1;
  633. let lastD = lw.getDate();
  634. let startData =
  635. lastY + '-' + (lastM < 10 ? '0' + lastM : lastM) + '-' + (lastD < 10 ? '0' + lastD : lastD); //三十天之前日期
  636. return startData;
  637. },
  638. GetPreMonthDay(date, monthNum, type) {
  639. var dateArr = date.split('-');
  640. var year = dateArr[0]; //获取当前日期的年份
  641. var month = dateArr[1]; //获取当前日期的月份
  642. var day = dateArr[2]; //获取当前日期的日
  643. var days = new Date(year, month, 0);
  644. days = days.getDate(); //获取当前日期中月的天数
  645. var year2 = year;
  646. var month2 = parseInt(month) - monthNum;
  647. if (month2 <= 0) {
  648. var absM = Math.abs(month2);
  649. year2 = parseInt(year2) - Math.ceil(absM / 12 == 0 ? 1 : parseInt(absM) / 12);
  650. month2 = 12 - (absM % 12);
  651. }
  652. var day2 = day;
  653. var days2 = new Date(year2, month2, 0);
  654. days2 = days2.getDate();
  655. if (day2 > days2) {
  656. day2 = days2;
  657. }
  658. if (month2 < 10) {
  659. month2 = '0' + month2;
  660. }
  661. var t2 = '';
  662. if (monthNum > 0) {
  663. t2 = year2 + '-' + month2 + '-01';
  664. } else {
  665. if (type == 'end') {
  666. var Months = new Date().getMonth() + 1;
  667. var days111 = new Date().getDate();
  668. if (Months < 10) {
  669. Months = '0' + Months;
  670. }
  671. if (days111 < 10) {
  672. days111 = '0' + days111;
  673. }
  674. if (parseInt(month2) >= new Date().getMonth() + 1) {
  675. t2 = year2 + '-' + Months + '-' + days111;
  676. } else {
  677. var daysd = this.getMonthDays(year2, month2);
  678. t2 = year2 + '-' + month2 + '-' + daysd;
  679. }
  680. } else {
  681. t2 = year2 + '-' + month2 + '-' + day2;
  682. }
  683. }
  684. return t2;
  685. },
  686. getMonthDays(year, month) {
  687. var stratDate = new Date(year, month - 1, 1),
  688. endData = new Date(year, month, 1);
  689. var days = (endData - stratDate) / (1000 * 60 * 60 * 24);
  690. return days;
  691. },
  692. getDeptInfo(type, grade, answerValue) {
  693. this.deptForm.type = type;
  694. if (grade == 'dq') {
  695. this.deptForm.parentId = this.companyCode;
  696. } else if (grade == 'xsb') {
  697. this.deptForm.parentId = this.regionCode;
  698. } else {
  699. this.deptForm.type = '';
  700. this.deptForm.parentId = '';
  701. }
  702. getSummaryMobileDeptInfo(this.deptForm).then((res) => {
  703. if (grade == 'dq') {
  704. if (res.data.region != null) {
  705. this.regionList = res.data.region;
  706. // for (var k = 0; k < this.collectionItemList.length; k++) {
  707. // if (this.collectionItemList[k].answerType == 'dq') {
  708. // this.collectionItemList[k].answerName = res.data.region[0].deptName;
  709. // this.collectionItemList[k].answerValue = res.data.region[0].deptCode;
  710. // }
  711. // }
  712. if (answerValue) {
  713. let findCompany = this.companyList.find((item) => item.deptCode == answerValue);
  714. this.onSalesRegionConfirm(findCompany);
  715. } else {
  716. this.onSalesRegionConfirm(this.regionList[0]);
  717. }
  718. }
  719. } else if (grade == 'xsb') {
  720. if (res.data.dept != null) {
  721. this.deptList = res.data.dept;
  722. if (answerValue) {
  723. let findCompany = this.regionList.find((item) => item.deptCode == answerValue);
  724. this.onSalesDepartmentConfirm(findCompany);
  725. } else {
  726. this.onSalesDepartmentConfirm(this.deptList[0]);
  727. }
  728. }
  729. } else if (grade == 'gs') {
  730. this.companyList = res.data.company;
  731. if (answerValue) {
  732. let findCompany = this.companyList.find((item) => item.deptCode == answerValue);
  733. this.onregionConfirm(findCompany);
  734. } else {
  735. this.onregionConfirm(this.companyList[0]);
  736. }
  737. if (res.data.dept != null) {
  738. this.deptList = res.data.dept;
  739. }
  740. if (res.data.region != null) {
  741. this.regionList = res.data.region;
  742. }
  743. }
  744. });
  745. },
  746. getDeptsBy(answerValue) {
  747. getDeptsByUser().then((res) => {
  748. if (res.data && res.code == 200) {
  749. let arr = [];
  750. res.data.forEach((val) => {
  751. arr.push({
  752. ancestors: val.ancestors || '',
  753. deptCode: val.deptCode || '',
  754. deptId: val.deptId || '',
  755. deptLevel: val.deptLevel || '',
  756. deptName: val.deptName || '',
  757. parentId: val.parentId || '',
  758. });
  759. });
  760. this.deptList = arr;
  761. if (answerValue) {
  762. let findCompany = this.regionList.find((item) => item.deptCode == answerValue);
  763. this.onSalesDepartmentConfirm(findCompany);
  764. } else {
  765. this.onSalesDepartmentConfirm(this.deptList[0]);
  766. }
  767. }
  768. });
  769. },
  770. dailyFn(row) {
  771. if (row.status != '0') {
  772. if (row.status == -1) {
  773. var dayTime = row.showDate;
  774. var times = new Date(
  775. dayTime.slice(0, 4) + '-' + dayTime.slice(4, 6) + '-' + dayTime.slice(6, 8)
  776. ).getTime();
  777. var time = new Date('2022-08-25').getTime();
  778. if (times < time) {
  779. this.$dialog.alert({
  780. title: '系统提示',
  781. message: '非常抱歉,8月25日前历史报告数据不存在',
  782. });
  783. } else {
  784. this.$router.push({
  785. path: '/weeklyHistoricalDetils',
  786. query: { reportId: row.id },
  787. });
  788. }
  789. } else {
  790. this.$router.push({
  791. path: '/weeklyHistoricalDetils',
  792. query: { reportId: row.id },
  793. });
  794. }
  795. }
  796. },
  797. onClickLeft() {
  798. this.$router.go(-1);
  799. },
  800. regionClick(val) {
  801. // if(this.powerGrade>4){
  802. this.index = val;
  803. this.RegionShow = true;
  804. // }
  805. },
  806. SalesRegionClick(val) {
  807. this.index = val;
  808. this.SalesRegionShow = true;
  809. },
  810. SalesDepartmentClick(val) {
  811. this.index = val;
  812. this.SalesDepartmentShow = true;
  813. },
  814. StaffClick() {
  815. this.StaffShow = true;
  816. },
  817. StartTimeClick() {
  818. this.StartTimeShow = true;
  819. },
  820. EndTimeClick() {
  821. this.EndTimeShow = true;
  822. },
  823. onSalesRegionConfirm(val) {
  824. this.SalesRegionShow = false;
  825. this.regionCode = val.deptId;
  826. // if (this.index !== '') {
  827. // this.collectionItemList[this.index].answerName = val.deptName;
  828. // this.collectionItemList[this.index].answerValue = val.deptCode;
  829. // for (var k1 = 0; k1 < this.collectionItemList.length; k1++) {
  830. // if (this.collectionItemList[k1].answerType == 'xsb' && val.deptId != '') {
  831. // this.getDeptInfo('dept', 'xsb');
  832. // }
  833. // }
  834. // } else {
  835. for (var k1 = 0; k1 < this.collectionItemList.length; k1++) {
  836. if (this.collectionItemList[k1].answerType == 'xsb') {
  837. this.collectionItemList[k1].answerName = '';
  838. this.collectionItemList[k1].answerValue = '';
  839. }
  840. if (this.collectionItemList[k1].answerType == 'dq') {
  841. this.collectionItemList[k1].answerName = val.deptName;
  842. this.collectionItemList[k1].answerValue = val.deptCode;
  843. }
  844. if (this.collectionItemList[k1].answerType == 'xsb' && val.deptId != '') {
  845. this.getDeptInfo('dept', 'xsb');
  846. }
  847. }
  848. // }
  849. // if (val.deptId != '') {
  850. // this.getDeptInfo('dept', 'xsb');
  851. // }
  852. },
  853. onregionConfirm(val) {
  854. this.RegionShow = false;
  855. this.companyCode = val.deptId;
  856. // if (this.index !== '') {
  857. // this.collectionItemList[this.index].answerName = val.deptName;
  858. // this.collectionItemList[this.index].answerValue = val.deptCode;
  859. // for (var k1 = 0; k1 < this.collectionItemList.length; k1++) {
  860. // if (this.collectionItemList[k1].answerType == 'dq') {
  861. // this.getDeptInfo('dept', 'dq');
  862. // }
  863. // }
  864. // } else {
  865. for (var k1 = 0; k1 < this.collectionItemList.length; k1++) {
  866. if (this.collectionItemList[k1].answerType == 'xsb') {
  867. this.collectionItemList[k1].answerName = '';
  868. this.collectionItemList[k1].answerValue = '';
  869. }
  870. if (this.collectionItemList[k1].answerType == 'xsb') {
  871. this.collectionItemList[k1].answerName = '';
  872. this.collectionItemList[k1].answerValue = '';
  873. }
  874. if (this.collectionItemList[k1].answerType == 'gs') {
  875. this.collectionItemList[k1].answerName = val.deptName;
  876. this.collectionItemList[k1].answerValue = val.deptCode;
  877. }
  878. if (this.collectionItemList[k1].answerType == 'dq') {
  879. this.getDeptInfo('dept', 'dq');
  880. }
  881. }
  882. // }
  883. },
  884. onSalesDepartmentConfirm(val) {
  885. this.SalesDepartmentShow = false;
  886. // if (this.index !== '') {
  887. // this.collectionItemList[this.index].answerName = val.deptName;
  888. // this.collectionItemList[this.index].answerValue = val.deptCode;
  889. // } else {
  890. for (var k1 = 0; k1 < this.collectionItemList.length; k1++) {
  891. if (this.collectionItemList[k1].answerType == 'xsb') {
  892. this.collectionItemList[k1].answerName = val.deptName;
  893. this.collectionItemList[k1].answerValue = val.deptCode;
  894. }
  895. }
  896. // }
  897. },
  898. onStartTimeConfirm(val) {
  899. this.formData.startTime = this.parseTime(new Date(val), '{y}-{m}-{d}') + '';
  900. this.StartTimeShow = false;
  901. this.endminDate = new Date(val);
  902. this.endmaxDate = new Date(this.GetPreMonthDay(this.formData.startTime, -2, 'end'));
  903. if (
  904. new Date(this.formData.startTime).getTime() > new Date(this.formData.endTime).getTime() ||
  905. new Date(this.endmaxDate).getTime() < new Date(this.formData.endTime).getTime()
  906. ) {
  907. this.formData.endTime = this.parseTime(new Date(val), '{y}-{m}-{d}') + '';
  908. this.endcurrentDate = this.GetPreMonthDay(this.formData.startTime, -2);
  909. }
  910. this.list = [];
  911. this.formData.pageNum = 1;
  912. },
  913. onEndTimeConfirm(val) {
  914. this.formData.endTime = this.parseTime(new Date(val), '{y}-{m}-{d}');
  915. this.strtmaxDate = new Date(val);
  916. if (new Date(this.formData.startTime).getTime() > new Date(this.formData.endTime).getTime()) {
  917. this.formData.startTime = this.formData.endTime;
  918. }
  919. this.list = [];
  920. this.formData.pageNum = 1;
  921. this.EndTimeShow = false;
  922. },
  923. // 添加经销商
  924. addJXS() {
  925. this.agentValue = '';
  926. this.moreTypeShow = true;
  927. this.getChainsList();
  928. },
  929. // 删除经销商
  930. closeJXS(item, index) {
  931. item.chainList.splice(index, 1);
  932. },
  933. getChainsList(value = '') {
  934. this.chainsData = [];
  935. chainsList({
  936. chainCode: '', // string 经销商编码
  937. chainName: value, // string 经销商名称
  938. limit: 100,
  939. })
  940. .then((res) => {
  941. if (res.code == 200 && res.rows) {
  942. this.chainsData = res.rows;
  943. } else {
  944. this.chainsData = [];
  945. }
  946. })
  947. .catch(() => {
  948. this.chainsData = [];
  949. });
  950. },
  951. onConfirmChainsList(value) {
  952. if (value && value.chainName != undefined) {
  953. let JXSSataList = this.collectionItemList.find((item) => item.answerType == 'jxs');
  954. if (!JXSSataList.chainList) {
  955. JXSSataList.chainList = [];
  956. }
  957. let isFlag = JXSSataList.chainList.find((val) => val.chainCode == value.chainCode);
  958. if (!isFlag) {
  959. JXSSataList.chainList.push({
  960. chainName: value.chainName,
  961. chainCode: value.chainCode,
  962. });
  963. this.moreTypeShow = false;
  964. } else {
  965. this.$toast('当前经销商已添加,不能重复添加!');
  966. }
  967. }
  968. },
  969. // 暂存 不校验答案是否必填
  970. onStorage() {
  971. this.setParams(() => {
  972. temporarilyCustomAnswer({
  973. userSummaryId: '', // Long 用户总结id,如果为新增则不填,编辑则必填
  974. summaryId: this.$route.query.summaryId, //Long 主管任务id
  975. customItemList: this.collectionItemList, //List<Object> 答案列表
  976. })
  977. .then((res) => {
  978. if (res.code == 200) {
  979. this.$router.go(-1);
  980. } else {
  981. this.$toast(res.msg);
  982. }
  983. })
  984. .catch((err) => {
  985. this.$toast(err.msg);
  986. });
  987. });
  988. },
  989. },
  990. };
  991. </script>
  992. <style scoped lang="scss">
  993. .container {
  994. // background-color: white;
  995. }
  996. .van-f-red {
  997. color: red;
  998. width: 8px;
  999. display: inline-block;
  1000. line-height: 26px;
  1001. }
  1002. .formLabel {
  1003. margin: 0 16px;
  1004. border-bottom: 1px solid #f1f1f1;
  1005. }
  1006. .formLabel .van-cell {
  1007. padding: 10px 0;
  1008. }
  1009. .formLabel .van-cell::after {
  1010. border: 0;
  1011. }
  1012. .formLabel .van-field {
  1013. border: 1px solid #f1f1f1;
  1014. padding: 6px;
  1015. width: 100%;
  1016. border-radius: 4px;
  1017. overflow: hidden;
  1018. }
  1019. .formLabel .van-field__control {
  1020. padding: 0 10px;
  1021. }
  1022. .formLabel .formLabeltitle {
  1023. position: absolute;
  1024. top: 8px;
  1025. }
  1026. .lineGrey {
  1027. height: 10px;
  1028. width: 100%;
  1029. background: #f1f1f1;
  1030. }
  1031. .z-checkbox .van-radio {
  1032. padding: 6px 0;
  1033. }
  1034. .z-cell .van-cell__title {
  1035. font-size: 16px;
  1036. }
  1037. .VisitSummaryAdd {
  1038. .tc {
  1039. display: flex;
  1040. justify-content: space-between;
  1041. .submitBtn {
  1042. width: 45%;
  1043. border-radius: 20px;
  1044. }
  1045. }
  1046. .van-form {
  1047. background-color: white;
  1048. }
  1049. .QRCodeActivity {
  1050. margin-bottom: 10px;
  1051. }
  1052. }
  1053. </style>
  1054. <style lang="scss">
  1055. .table-headermd {
  1056. font-size: 12px;
  1057. text-align: center;
  1058. position: initial;
  1059. width: 98% !important;
  1060. margin: 0 auto;
  1061. border-right: 0;
  1062. }
  1063. .table-headermd .el-table__header,
  1064. .table-headermd .el-table__body {
  1065. width: 100% !important;
  1066. }
  1067. /*.table-headermd col {width: 6.8rem;}*/
  1068. .table-headermd col:nth-child(4) {
  1069. width: 5.6rem;
  1070. }
  1071. .table-headermd col:nth-child(2),
  1072. .table-headermd col:nth-child(3) {
  1073. width: 4.6rem;
  1074. }
  1075. .table-headermd .van-cell {
  1076. padding: 0 4px;
  1077. height: 100%;
  1078. }
  1079. .table-headermd th.el-table__cell > .cell {
  1080. padding: 0 4px;
  1081. text-align: center;
  1082. }
  1083. .table-headermd th.el-table__cell:first-child > .cell {
  1084. text-align: left;
  1085. }
  1086. .table-headermd th.el-table__cell {
  1087. background-color: #1989fa;
  1088. color: #fff;
  1089. }
  1090. .table-headermd .el-table__cell {
  1091. padding: 4px 0;
  1092. }
  1093. .table-headermd.el-table .cell {
  1094. padding: 0;
  1095. }
  1096. .table-headermd .tipTitle {
  1097. overflow: hidden;
  1098. text-overflow: ellipsis;
  1099. display: -webkit-box;
  1100. -webkit-box-orient: vertical;
  1101. -webkit-line-clamp: 2;
  1102. }
  1103. .table-headermd::before {
  1104. height: 0;
  1105. }
  1106. .xing {
  1107. color: red;
  1108. padding-left: 4px;
  1109. }
  1110. .formLabel .van-radio__label,
  1111. .formLabel .van-checkbox__label {
  1112. font-size: 1.4rem;
  1113. }
  1114. .table-headermd .cell,
  1115. .el-table--border .el-table__cell:first-child .cell {
  1116. padding: 0 4px;
  1117. }
  1118. .van-dialog__confirm,
  1119. .van-dialog__confirm:active {
  1120. color: #1989fa;
  1121. }
  1122. .navBarTOP {
  1123. position: fixed;
  1124. width: 100%;
  1125. z-index: 2;
  1126. top: 0;
  1127. }
  1128. .isTableMust {
  1129. padding: 4px;
  1130. color: #999;
  1131. margin: 0;
  1132. margin-top: -10px;
  1133. }
  1134. .jxsBox {
  1135. .jxsContent {
  1136. margin-bottom: 10px;
  1137. .item {
  1138. padding: 5px;
  1139. background: #e9e9e9;
  1140. margin: 5px 0;
  1141. .el-popover__reference-wrapper {
  1142. display: flex;
  1143. justify-content: space-between;
  1144. align-items: center;
  1145. }
  1146. .selectItem {
  1147. flex: 1;
  1148. white-space: nowrap;
  1149. overflow: hidden;
  1150. text-overflow: ellipsis;
  1151. font-size: 14px;
  1152. }
  1153. }
  1154. }
  1155. .tips {
  1156. text-align: right;
  1157. }
  1158. }
  1159. </style>