allowWriteAgainSummary.vue 31 KB

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