myCalendar.vue 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949
  1. <template>
  2. <div class="my-calendar">
  3. <el-card class="my-calendar-list">
  4. <div class="top-wrap">
  5. <ul class="tabs-type">
  6. <li :class="['type-item',{ 'act': default_tab === tab.key }]" v-for="tab in tabs" :key="tab.key" @click="default_tab=tab.key">{{tab.label}}</li>
  7. </ul>
  8. <!-- 已处理申请筛选模块 -->
  9. <div class="filter-wrap" v-if="default_tab===2 ">
  10. <el-select placeholder="请选择状态" v-model="roadStatus" clearable @change="handleCurrentChange(1)">
  11. <el-option
  12. v-for="item in roadStatusOpts"
  13. :key="item.value"
  14. :label="item.label"
  15. :value="item.value"
  16. ></el-option>
  17. </el-select>
  18. <el-date-picker
  19. clearable
  20. v-model="roadTime"
  21. type="daterange"
  22. range-separator="至"
  23. start-placeholder="开始日期"
  24. end-placeholder="结束日期"
  25. value-format="yyyy-MM-dd"
  26. @change="handleCurrentChange(1)"
  27. />
  28. <el-input
  29. placeholder="客户名称"
  30. prefix-icon="el-icon-search"
  31. v-model="roadSearchVal"
  32. style="display:inline-block;width:300px;margin-left: auto;"
  33. clearable
  34. @change="handleCurrentChange(1)"
  35. />
  36. </div>
  37. </div>
  38. <el-table
  39. :data="tableData"
  40. v-loading="tableLoading"
  41. element-loading-text="数据加载中..."
  42. style="box-shadow: 0px 3px 6px rgba(155, 170, 219, 0.2);margin-top:20px;"
  43. border
  44. >
  45. <el-table-column
  46. v-if="!item.hidden"
  47. v-for="item in tableColums"
  48. :key="item.label"
  49. :label="item.label"
  50. :width="item.widthsty"
  51. :min-width="item.minwidthsty"
  52. align="center"
  53. >
  54. <template slot-scope="{row}">
  55. <!-- 时间处理 -->
  56. <span v-if="item.key === 'time'">
  57. {{
  58. row.StartDate === row.EndDate
  59. ? ($moment(row.StartDate + " " + row.StartTime).format(
  60. "MM.DD(ddd) HH:mm") + '~' + $moment(row.EndDate + " " + row.EndTime).format("HH:mm"))
  61. : (
  62. $moment(row.StartDate + " " + row.StartTime).format(
  63. "MM.DD(ddd) HH:mm") + '~' + $moment(row.EndDate + " " + row.EndTime).format("MM.DD(ddd) HH:mm")
  64. )
  65. }}
  66. </span>
  67. <!-- 活动形式 -->
  68. <span v-else-if="item.key === 'RoadshowType'">
  69. {{row.RoadshowType}} {{ row.RoadshowType === '线上' ? `(${row.RoadshowPlatform} )` : `(${row.Province}${row.City}${row.District})`}}
  70. </span>
  71. <!-- 状态 -->
  72. <span v-else-if="item.key === 'Status'"
  73. :class="row.Status === 2 ? 'successty' : row.Status === 3 ? 'deletesty' : '' ">
  74. {{statusMap.get(row.Status)}}
  75. <i
  76. class="el-icon-info"
  77. style="color:#666;"
  78. v-if="[3,4].includes(row.Status) && ENUM_RESEARCHLIST.includes(Role)"
  79. @click="iconClick(row)"
  80. />
  81. </span>
  82. <!-- 客户拼接 -->
  83. <span v-else-if="item.key === 'company'">
  84. {{ row.CooperationName || row.CompanyName || '——'}}
  85. <el-tooltip effect="dark" placement="top-start" v-if="row.CompanyId" @mouseenter.native="getCompanyInfo(row)" popper-class="company-tip-poper">
  86. <i class="el-icon-info"/>
  87. <div slot="content" v-if="companyInfo">
  88. <!-- 权益客户 -->
  89. <template v-if="Role.includes('rai')">
  90. <p style="margin: 6px 0;">客户状态:{{companyInfo.Status}}</p>
  91. <p style="margin: 6px 0;">所属行业:{{companyInfo.IndustryName}}</p>
  92. <p style="margin: 6px 0;text-indent: -70px;margin-left: 70px;">行业权限:{{companyInfo.PermissionName}}</p>
  93. <p style="margin: 6px 0;">累计互动次数:{{companyInfo.ReportReadTotal}}</p>
  94. </template>
  95. <!-- ficc客户分国内海外 -->
  96. <template v-else>
  97. <template v-if="companyInfo.EnglishCompany===1">
  98. <p style="margin: 6px 0;">所属国家:{{companyInfo.EnglishCountry}}</p>
  99. <p style="margin: 6px 0;">累计点击量:{{companyInfo.EnglishViewTotal}}</p>
  100. </template>
  101. <template v-else>
  102. <p style="margin: 6px 0;">客户状态:{{companyInfo.Status}}</p>
  103. <p style="margin: 6px 0;">所属行业:{{companyInfo.IndustryName}}</p>
  104. <p style="margin: 6px 0;text-indent: -70px;margin-left: 70px;">开通品种:{{companyInfo.PermissionName}}</p>
  105. <p style="margin: 6px 0;">累计报告阅读次数:{{companyInfo.ReportReadTotal}}</p>
  106. </template>
  107. </template>
  108. </div>
  109. </el-tooltip>
  110. </span>
  111. <span v-else>{{ row[item.key] || '——' }}</span>
  112. </template>
  113. </el-table-column>
  114. <el-table-column label="操作" align="center" v-if="handleArr.length">
  115. <template slot-scope="{ row }" >
  116. <template v-if="![4,6].includes(row.Status) && ($moment(`${row.StartDate} ${row.StartTime}`).valueOf() > new Date().getTime())">
  117. <template v-if="default_tab === 1">
  118. <span
  119. class="editsty"
  120. v-if="handleArr.includes('撤回')"
  121. @click="revocation(row)"
  122. >撤回</span>
  123. <span
  124. class="editsty"
  125. v-if="handleArr.includes('接受')"
  126. @click="accept(row)"
  127. >接受</span>
  128. <span
  129. class="editsty"
  130. v-if="handleArr.includes('拒绝')"
  131. @click="refuse(row)"
  132. >拒绝</span>
  133. </template>
  134. <template v-if="default_tab === 2">
  135. <span
  136. class="deletesty"
  137. v-if="handleArr.includes('删除') && row.Status === 2"
  138. @click="deleteRoadshow(row)"
  139. >删除</span
  140. >
  141. <span
  142. class="editsty"
  143. v-if="handleArr.includes('拒绝理由') && row.Status === 3"
  144. @click="showRefuseReason(row)"
  145. >拒绝理由</span>
  146. <span
  147. class="editsty"
  148. v-if="handleArr.includes('修改重提') && [3,5].includes(row.Status)"
  149. @click="resubmit(row)"
  150. >修改重提</span>
  151. </template>
  152. <template v-if="[3,4].includes(default_tab)">
  153. <span
  154. class="editsty"
  155. v-if="handleArr.includes('修改')"
  156. @click="editActivityHandle(row)"
  157. >修改</span>
  158. <span
  159. class="deletesty"
  160. @click="delNormalHandle(row)"
  161. v-if="handleArr.includes('删除')"
  162. >删除</span>
  163. </template>
  164. </template>
  165. <!-- 事项的操作栏由后端控制 -->
  166. <template v-if="default_tab===5">
  167. <!-- <span class="editsty" v-if="row.EditReason" @click="showReason(row)">最近修改记录</span> -->
  168. <span
  169. class="editsty"
  170. v-if="!row.ButtonAuth.EditDisabled"
  171. @click="editActivityHandle(row)"
  172. >修改</span>
  173. <span
  174. class="deletesty"
  175. @click="delNormalHandle(row)"
  176. v-if="!row.ButtonAuth.RemoveDisabled"
  177. >删除</span>
  178. </template>
  179. <!-- 提交/查看参会名单 按钮由后端控制 -->
  180. <template v-if="default_tab===2&&!ENUM_RESEARCHLIST.includes(Role)">
  181. <span
  182. class="editsty"
  183. v-if="row.EditButton"
  184. @click="editActivityHandle(row)"
  185. >修改</span>
  186. <span
  187. class="deletesty"
  188. v-if="row.SubmitButton"
  189. @click="submitAttendees(row,'提交')"
  190. >提交参会名单</span>
  191. <span
  192. class="editsty"
  193. v-if="row.ViewButton"
  194. @click="submitAttendees(row,'查看')"
  195. >查看参会名单
  196. </span>
  197. <span
  198. class="editsty"
  199. v-if="row.QuestionStatus===1"
  200. @click="handleShowAddAnswer(row,'view')"
  201. >问答详情
  202. </span>
  203. </template>
  204. <!-- 客户问答、问答详情(仅针对路演) -->
  205. <template v-if="default_tab===2&&ENUM_RESEARCHLIST.includes(Role)">
  206. <span
  207. class="editsty"
  208. v-if="row.Status===2&&row.ActivityType==='路演'&&row.QuestionStatus===0"
  209. @click="handleShowAddAnswer(row)"
  210. >填写客户问答</span>
  211. <span
  212. class="editsty"
  213. v-if="row.QuestionStatus===1"
  214. @click="handleShowAddAnswer(row,'view')"
  215. >问答详情
  216. </span>
  217. </template>
  218. </template>
  219. </el-table-column>
  220. <div slot="empty" style="padding: 20px 0;">
  221. <img src="~@/assets/img/data_m/table_no.png" alt="" style="display:block;width:135px;height:90px;margin: 0 auto;">
  222. <span>暂无数据</span>
  223. </div>
  224. </el-table>
  225. <el-col :span="24" class="toolbar">
  226. <m-page
  227. :total="total"
  228. :page_no="page_no"
  229. :pageSize="10"
  230. @handleCurrentChange="handleCurrentChange"
  231. />
  232. </el-col>
  233. </el-card>
  234. <el-card class="my-calendar-context" v-if="Role!=='admin'">
  235. <!-- 日程组件 -->
  236. <calendar
  237. ref="calendarRef"
  238. :eventList="eventList"
  239. @eventClick="eventClick"
  240. @cellClick="cellClick"
  241. @weekChange="getEventList"
  242. @editCallback="editCallback"
  243. @delAuthHandle="deleteRoadshow"
  244. >
  245. <template #left>
  246. <p class="left-title">我的日历</p>
  247. </template>
  248. <template #right>
  249. <el-button type="primary" @click="addMatterBtn" v-if="ENUM_RESEARCHLIST.includes(Role)||sellerList.includes(Role)">添加事项</el-button>
  250. </template>
  251. </calendar>
  252. </el-card>
  253. <!-- 添加事项弹窗 -->
  254. <addMatterDia
  255. :isShow.sync="isAddMatterDiaShow"
  256. :edit_matter_id="edit_matter_id"
  257. :matter_form="matter_form"
  258. :matter_date="matter_date"
  259. @ensureCallback="refreshData"
  260. />
  261. <!-- 修改活动弹窗(修改重提) -->
  262. <addActivityBtnDia
  263. :isShow.sync="isActivityBtnDiaShow"
  264. :initData="resubmitData"
  265. :edit_id="edit_id"
  266. :edit_rs_id="edit_rs_id"
  267. @ensureCallback="refreshData"
  268. ref="activityCellDia"
  269. />
  270. <!-- 表格活动弹窗 -->
  271. <addActivityCellDia
  272. :isShow.sync="isActivityCellDiaShow"
  273. :initData="sonData"
  274. :edit_id="edit_id"
  275. :edit_rs_id="edit_rs_id"
  276. @ensureCallback="refreshData"
  277. ref="addActivityCellDia"
  278. :isEditType='isRaiEditType'
  279. />
  280. <!-- 拒绝弹窗 -->
  281. <el-dialog
  282. title="拒绝"
  283. :visible.sync="isRefuseDiaShow"
  284. :modal-append-to-body="false"
  285. width="500px"
  286. @close="refuseDiaCancel"
  287. >
  288. <el-input
  289. type="textarea"
  290. v-model.trim="refuseReason"
  291. :autosize="{ minRows: 4, maxRows: 8 }"
  292. placeholder="请输入拒绝理由"
  293. resize="none"
  294. ></el-input>
  295. <span slot="footer" class="dialog-footer">
  296. <el-button @click="refuseDiaCancel">取消</el-button>
  297. <el-button type="primary" @click="refuseDiaConfirm">确定</el-button>
  298. </span>
  299. </el-dialog>
  300. <!-- 删除弹窗 -->
  301. <el-dialog
  302. title="删除"
  303. :visible.sync="isDeleteDiaShow"
  304. :modal-append-to-body="false"
  305. width="500px"
  306. @close="deleteDiaCancel"
  307. >
  308. <el-input
  309. type="textarea"
  310. v-model.trim="deleteReason"
  311. :autosize="{ minRows: 4, maxRows: 8 }"
  312. placeholder="请输入删除理由"
  313. resize="none"
  314. ></el-input>
  315. <span slot="footer" class="dialog-footer">
  316. <el-button @click="deleteDiaCancel">取消</el-button>
  317. <el-button type="primary" @click="deleteDiaConfirm">确定</el-button>
  318. </span>
  319. </el-dialog>
  320. <!-- 最近变更记录弹窗 -->
  321. <el-dialog
  322. title="最近修改记录"
  323. :visible.sync="isReasonDiaShow"
  324. :modal-append-to-body="false"
  325. width="500px"
  326. @close="isReasonDiaShow=false"
  327. >
  328. <div class="reason-dialog-container">
  329. <div class="form-item">
  330. <p>修改原因</p>
  331. <div class="reason">
  332. <textarea rows="10" disabled v-model="modifyReason.text" placeholder="修改原因描述"></textarea>
  333. <span class="hint">最近变更时间:{{modifyReason.time||''}}</span>
  334. </div>
  335. </div>
  336. </div>
  337. </el-dialog>
  338. <!-- 提交参会名单弹窗 -->
  339. <addParticipateDia
  340. :isAddParticipateShow="isAddParticipateShow"
  341. :RsCalendarId="currentRsCalendarId"
  342. :ResearcherId="currentResearcherId"
  343. @close="isAddParticipateShow=false"
  344. @confirm="getCalendarList();isAddParticipateShow=false;"
  345. />
  346. <!-- 查看参会名单弹窗 -->
  347. <showParticipateListDia
  348. :isParticipateShow="isParticipateShow"
  349. :RsCalendarId="currentRsCalendarId"
  350. :ResearcherId="currentResearcherId"
  351. @close="isParticipateShow=false"
  352. />
  353. <!-- 添加问答 -->
  354. <addAnswer
  355. :companyName="currentAddAnswerData.CompanyName"
  356. :RsCalendarResearcherId="edit_rs_id"
  357. :RsCalendarId="edit_id"
  358. :isShow.sync="isShowAddAnswer"
  359. @success="getCalendarList()"
  360. />
  361. <!-- 查看问答 -->
  362. <viewAnswer
  363. :isShow.sync="isShowViewAnswer"
  364. :roadAnswerData="currentAddAnswerData"
  365. :RsCalendarResearcherId="edit_rs_id"
  366. />
  367. </div>
  368. </template>
  369. <script>
  370. import { roadshowInterence } from "@/api/api.js";
  371. import calendar from "@/components/calendar.vue";
  372. import { getTabs,tableColums,handleArr,ENUM_RESEARCHLIST,sellerList } from "./roleConfig/myCalendarConfig";
  373. import addMatterDia from "./compononts/addMatterDia.vue";
  374. import addActivityCellDia from "./compononts/addActivityCellDia.vue";
  375. import addActivityBtnDia from "./compononts/addActivityBtnDia.vue";
  376. import addParticipateDia from "./compononts/addParticipateDia.vue";
  377. import mPage from "@/components/mPage.vue";
  378. import showParticipateListDia from "./compononts/showParticipateListDia.vue";
  379. import addAnswer from "./compononts/addAnswer.vue";
  380. import viewAnswer from './compononts/viewAnswer.vue'
  381. export default {
  382. components: {
  383. calendar,
  384. addMatterDia,
  385. mPage,
  386. addActivityBtnDia,
  387. addActivityCellDia,
  388. addParticipateDia,
  389. showParticipateListDia,
  390. addAnswer,
  391. viewAnswer
  392. },
  393. watch: {
  394. default_tab(newval) {
  395. this.tableColums = tableColums(newval);
  396. this.handleArr = handleArr(newval);
  397. this.page_no = 1;
  398. newval && this.getCalendarList();
  399. }
  400. },
  401. computed: {
  402. Role() {
  403. return localStorage.getItem("Role");
  404. }
  405. },
  406. data() {
  407. return {
  408. sellerList,
  409. ENUM_RESEARCHLIST,
  410. tabs: getTabs(localStorage.getItem("Role")),
  411. default_tab: 0,
  412. tableColums: [],//默认列
  413. handleArr: [],//操作栏
  414. tableLoading: false,
  415. statusMap: new Map([
  416. [1, '待接受'],
  417. [2, '已接受'],
  418. [3, '已拒绝'],
  419. [4, '已删除'],
  420. [5, '已撤回'],
  421. [6, '已结束'],
  422. ]),
  423. tableData:[],//表格数据
  424. total: 0,
  425. page_no: 1,
  426. // 添加事项弹窗显示
  427. isAddMatterDiaShow: false,
  428. // 拒绝弹窗显示
  429. isRefuseDiaShow: false,
  430. // 删除弹窗显示
  431. isDeleteDiaShow: false,
  432. //添加参会名单弹窗显示
  433. isAddParticipateShow:false,
  434. //查看参会名单弹窗显示
  435. isParticipateShow:false,
  436. currentRsCalendarId:0,//当前选择的路演id
  437. // 当前行信息
  438. rowInfo: null,
  439. // 拒绝理由
  440. refuseReason: "",
  441. // 删除原因
  442. deleteReason: "",
  443. // 修改活动弹窗(修改重提)
  444. isActivityBtnDiaShow: false,
  445. // 研究员列表
  446. researcherList: [],
  447. // 日历日程列表
  448. eventList: [],
  449. // 重提初始数据
  450. resubmitData: null,
  451. companyInfo: null,
  452. edit_id:'',//编辑日历id
  453. edit_rs_id:'',
  454. edit_matter_id:'',
  455. matter_form: {},
  456. matter_date:new Date(),
  457. isActivityCellDiaShow: false,
  458. sonData: null,
  459. edit_id:0,
  460. edit_rs_id: 0,
  461. modifyReason:{
  462. text:'',
  463. time:''
  464. },
  465. isReasonDiaShow:false,
  466. currentResearcherId:0,
  467. isRaiEditType:'',
  468. currentAddAnswerData:{},
  469. isShowAddAnswer:false,//添加问答
  470. isShowViewAnswer:false,//查看客户问答
  471. roadStatus:'',
  472. roadStatusOpts:[
  473. {
  474. label:'已结束',
  475. value:6
  476. },
  477. {
  478. label:'已接受',
  479. value:2
  480. },
  481. {
  482. label:'已撤回',
  483. value:5
  484. },
  485. {
  486. label:'已删除',
  487. value:4
  488. },
  489. {
  490. label:'已拒绝',
  491. value:3
  492. },
  493. ],
  494. roadTime:'',
  495. roadSearchVal:''
  496. };
  497. },
  498. methods: {
  499. // 填写客户问答
  500. handleShowAddAnswer(row,type){
  501. this.edit_id = row.RsCalendarId;
  502. this.edit_rs_id = row.RsCalendarResearcherId;
  503. this.currentAddAnswerData=row
  504. if(type==='view'){
  505. this.isShowViewAnswer=true
  506. }else{
  507. this.isShowAddAnswer = true;
  508. }
  509. },
  510. // 添加事项按钮
  511. addMatterBtn() {
  512. const { currentStart } = this.$refs.calendarRef.calendarApi.view;
  513. this.matter_date=currentStart
  514. this.edit_matter_id = 0;
  515. this.matter_form = {};
  516. this.isAddMatterDiaShow = true;
  517. },
  518. // 获取日历表格列表数据
  519. async getCalendarList() {
  520. this.tableLoading = true;
  521. // 发送请求
  522. const { Ret,Data } = this.default_tab === 5 ? await roadshowInterence.mattersList({
  523. PageSize: 10,
  524. CurrentIndex: this.page_no
  525. }) : await roadshowInterence.getCalendarList({
  526. PageSize: 10,
  527. CurrentIndex: this.page_no,
  528. CalendarType: this.default_tab,
  529. Status:this.roadStatus,
  530. StartDate:this.roadTime?this.roadTime[0]:'',
  531. EndDate:this.roadTime?this.roadTime[1]:'',
  532. Keyword:this.roadSearchVal,
  533. });
  534. this.tableLoading = false;
  535. if(Ret !== 200) return;
  536. this.total = Data.Paging.Totals;
  537. this.tableData = this.default_tab === 5 ? Data.List&&Data.List.map(item => ({...item, ActivityType: '事项'})) : Data.List;
  538. },
  539. // 页码改变事件
  540. handleCurrentChange(page, index) {
  541. this.page_no = page;
  542. this.getCalendarList();
  543. },
  544. /* 获取客户信息 */
  545. async getCompanyInfo({CompanyId,EnglishCompany,ActivityType,ResearcherId,SysUserId}) {
  546. const { Data } = await roadshowInterence.componyDetail({ CompanyId,EnglishCompany,SellerId:SysUserId });
  547. this.companyInfo = Data;
  548. },
  549. // 撤回操作
  550. async revocation(row) {
  551. await this.$confirm("确定要撤回该活动申请吗?", "撤回", {
  552. confirmButtonName: "确定",
  553. cancelButtonName: "取消",
  554. type: "warning",
  555. });
  556. const { Ret } = await roadshowInterence.revocationRoadshow({
  557. RsCalendarId: row.RsCalendarId,
  558. RsCalendarResearcherId: row.RsCalendarResearcherId,
  559. });
  560. if(Ret !== 200) return;
  561. this.$message.success('撤回成功');
  562. this.page_no = this.tableData.length === 1 ? this.page_no -1 : this.page_no;
  563. this.refreshData()
  564. },
  565. // 接受操作
  566. async accept(row) {
  567. await this.$confirm("接受申请后会加入您的日历,请确认", "接受", {
  568. confirmButtonName: "确定",
  569. cancelButtonName: "取消",
  570. type: "warning",
  571. });
  572. const { Ret } = await roadshowInterence.acceptRoadshow({
  573. RsCalendarId: row.RsCalendarId,
  574. RsCalendarResearcherId: row.RsCalendarResearcherId,
  575. });
  576. if( Ret !== 200) return;
  577. this.$message.success('加入成功');
  578. this.page_no = this.tableData.length === 1 ? this.page_no -1 : this.page_no;
  579. this.refreshData()
  580. },
  581. // 拒绝操作
  582. refuse(row) {
  583. this.rowInfo = row;
  584. this.isRefuseDiaShow = true;
  585. },
  586. // 拒绝弹窗取消操作
  587. refuseDiaCancel() {
  588. this.refuseReason = "";
  589. this.rowInfo = null;
  590. this.isRefuseDiaShow = false;
  591. },
  592. // 拒绝弹窗确定操作
  593. async refuseDiaConfirm() {
  594. if (!this.refuseReason) return this.$message.warning("拒绝理由不能为空");
  595. const { Ret } = await roadshowInterence.refuseRoadshow({
  596. RsCalendarId: this.rowInfo.RsCalendarId,
  597. RsCalendarResearcherId: this.rowInfo.RsCalendarResearcherId,
  598. RefuseReason: this.refuseReason,
  599. });
  600. if(Ret !== 200) return
  601. this.page_no = this.tableData.length === 1 ? this.page_no -1 : this.page_no;
  602. this.refuseDiaCancel();
  603. this.getCalendarList();
  604. },
  605. // 拒绝理由
  606. showRefuseReason(row) {
  607. this.$alert(row.RefuseReason || "拒绝理由", "拒绝理由", {
  608. confirmButtonText: "知道了",
  609. });
  610. },
  611. // 图标点击事件
  612. iconClick(row) {
  613. if (row.Status === 4) {
  614. // 删除原因
  615. this.$alert(row.DeleteReason || "删除原因", "删除原因", {
  616. confirmButtonText: "知道了",
  617. });
  618. } else if (row.Status === 3) {
  619. // 拒绝理由
  620. this.showRefuseReason(row);
  621. }
  622. },
  623. // 审核删除
  624. deleteRoadshow(row) {
  625. if(['内部会议'].includes(row.ActivityType)) return this.delNormalHandle(row);
  626. this.rowInfo = row;
  627. this.isDeleteDiaShow = true;
  628. },
  629. /* 非审核删除 气泡确认 内部会议 电话会 事项*/
  630. delNormalHandle({RsCalendarId,RsCalendarResearcherId,RsMattersId}) {
  631. this.$confirm("删除该活动后,将从日历中移除,确定继续吗?", "删除", {
  632. type: "warning"
  633. }).then( async() => {
  634. //删除事项
  635. let { Ret } = RsMattersId ? await roadshowInterence.delMatters({ RsMattersId })
  636. //删除活动
  637. : await roadshowInterence.deleteRoadshow({ RsCalendarId, RsCalendarResearcherId });
  638. if(Ret !== 200) return;
  639. this.$message.success('删除成功');
  640. this.page_no = this.tableData.length === 1 ? this.page_no -1 : this.page_no;
  641. this.refreshData()
  642. })
  643. .catch(() => {});
  644. },
  645. /* 编辑活动 或事项 */
  646. editActivityHandle(row) {
  647. this.isRaiEditType ='RaiEdit'
  648. if(this.default_tab==5){
  649. this.editMatterHandle(row);
  650. }else{
  651. this.raiEditMatterHandle(row)
  652. }
  653. },
  654. // 删除弹窗取消操作
  655. deleteDiaCancel() {
  656. this.deleteReason = "";
  657. this.rowInfo = null;
  658. this.isDeleteDiaShow = false;
  659. },
  660. // 删除弹窗确定操作
  661. async deleteDiaConfirm() {
  662. if (!this.deleteReason) return this.$message.warning("删除原因不能为空");
  663. const { Ret } = await roadshowInterence.deleteRoadshow({
  664. RsCalendarId: this.rowInfo.RsCalendarId,
  665. RsCalendarResearcherId: this.rowInfo.RsCalendarResearcherId,
  666. DeleteReason: this.deleteReason,
  667. });
  668. if( Ret !== 200) return;
  669. this.$message.success('删除成功');
  670. this.deleteDiaCancel();
  671. this.refreshData();
  672. },
  673. // 修改重提
  674. resubmit(row) {
  675. this.resubmitData = this.editInfoBack(row);
  676. this.edit_id = row.RsCalendarId;
  677. this.edit_rs_id = row.RsCalendarResearcherId;
  678. this.isActivityBtnDiaShow = true;
  679. },
  680. refreshData() {
  681. this.getCalendarList();
  682. this.getEventList();
  683. },
  684. /* 回显表单 type回显的研究员是[]还是'' */
  685. editInfoBack({ ActivityType,RoadshowType,RoadshowPlatform,City,Province,CompanyId,CompanyName,ResearcherId,Theme,CooperationName,ActivityCategory,StartDate,EndDate,StartTime,EndTime,EnglishCompany},type = 1) {
  686. return {
  687. activityType: ActivityType, // 活动类型
  688. roadshowType: RoadshowType, // 路演形式
  689. roadshowPlatform: RoadshowPlatform, // 路演平台
  690. roadshowCity: Province ? [Province,City] : [], // 路演城市
  691. companyId: CompanyId, // 客户id
  692. companyName: CompanyName, // 客户名称
  693. englishCompany:EnglishCompany,// 是否是海外客户
  694. meetingType: RoadshowType, // 会议形式
  695. meetingPlatform: RoadshowPlatform, // 会议平台
  696. meetingCity: Province ? [Province,City] : [], // 会议城市
  697. meetingTheme: Theme, // 会议主题
  698. partnersName: CooperationName, // 合作方名称
  699. activityClass: ActivityCategory, // 活动类别
  700. selectResearchers: [
  701. // 选择的研究员
  702. {
  703. researcherId: type === 2 ? ResearcherId.split(',').map(item => Number(item)) : Number(ResearcherId),
  704. startDate: new Date(StartDate),
  705. startTime: new Date(`${StartDate} ${StartTime}`),
  706. endDate: new Date(EndDate),
  707. endTime: new Date(`${EndDate} ${EndTime}`),
  708. },
  709. ],
  710. };
  711. },
  712. // 获取日历日程列表
  713. async getEventList() {
  714. if(this.Role === 'admin') return;
  715. //当前的起始日期
  716. const { currentStart,currentEnd } = this.$refs.calendarRef.calendarApi.view;
  717. const { formateDate } = this.$refs.calendarRef;
  718. const res = await roadshowInterence.myCalendarDetail({
  719. StartDate: formateDate(currentStart),
  720. EndDate: formateDate(new Date(currentEnd.getTime()- 24*60*60*1000)),
  721. });
  722. // 赋值
  723. this.eventList = [
  724. ...(res.Data.CalendarList || []),
  725. ...(res.Data.RsMattersList || []),
  726. ].map((item, index) => {
  727. return { ...item, id: index };
  728. });
  729. },
  730. /* 日历入口 编辑活动时 回显内容 */
  731. editCallback({ ActivityType,RoadshowType,RoadshowPlatform,City,Province,CompanyId,CompanyName,ResearcherId,RsCalendarResearcherId,Theme,CooperationName,ActivityCategory,StartDate,EndDate,RsCalendarId,RsMattersId,StartTime,EndTime,MatterContent,EnglishCompany}) {
  732. if(RsCalendarId) { // 编辑活动
  733. this.raiEditMatterHandle({ActivityType,RoadshowType,RoadshowPlatform,City,Province,CompanyId,CompanyName,ResearcherId,RsCalendarResearcherId,Theme,CooperationName,ActivityCategory,StartDate,EndDate,RsCalendarId,RsMattersId,StartTime,EndTime,MatterContent,EnglishCompany})
  734. }else { //编辑事项
  735. this.editMatterHandle({ RsMattersId,StartDate,StartTime,EndDate,EndTime,MatterContent });
  736. }
  737. },
  738. raiEditMatterHandle({ ActivityType,RoadshowType,RoadshowPlatform,City,Province,CompanyId,CompanyName,ResearcherId,RsCalendarResearcherId,Theme,CooperationName,ActivityCategory,StartDate,EndDate,RsCalendarId,RsMattersId,StartTime,EndTime,MatterContent,EnglishCompany,District=''}){
  739. this.sonData = {
  740. activityType: ActivityType, // 活动类型
  741. roadshowType: RoadshowType, // 路演形式
  742. roadshowPlatform: RoadshowPlatform, // 路演平台
  743. roadshowCity: Province ? [Province,City] : [], // 路演城市
  744. companyId: CompanyId, // 客户id
  745. companyName: CompanyName, // 客户名称
  746. englishCompany:EnglishCompany,// 是否是海外客户
  747. meetingType: RoadshowType, // 会议形式
  748. meetingPlatform: RoadshowPlatform, // 会议平台
  749. meetingCity: Province ? [Province,City] : [], // 会议城市
  750. meetingTheme: Theme, // 会议主题
  751. partnersName: CooperationName, // 合作方名称
  752. activityClass: ActivityCategory, // 活动类别
  753. District: District || '',
  754. selectResearchers: [
  755. // 选择的研究员
  756. {
  757. researcherId: Number(ResearcherId),
  758. startDate: new Date(StartDate),
  759. startTime: new Date(`${StartDate} ${StartTime}`),
  760. endDate: new Date(EndDate),
  761. endTime: new Date(`${EndDate} ${EndTime}`),
  762. },
  763. ],
  764. };
  765. this.edit_id = RsCalendarId;
  766. this.edit_rs_id = RsCalendarResearcherId;
  767. this.isActivityCellDiaShow = true;
  768. },
  769. /* 编辑事项 */
  770. editMatterHandle({ RsMattersId,StartDate,StartTime,EndDate,EndTime,MatterContent }) {
  771. this.edit_matter_id = RsMattersId;
  772. this.matter_form = {
  773. startDate: new Date(`${StartDate} ${StartTime}`),
  774. startTime: new Date(`${StartDate} ${StartTime}`),
  775. endDate: new Date(`${EndDate} ${EndTime}`),
  776. endTime: new Date(`${EndDate} ${EndTime}`),
  777. matterContent: MatterContent,
  778. };
  779. this.isAddMatterDiaShow = true;
  780. },
  781. //查看最近变更原因
  782. showReason(row){
  783. this.modifyReason = {
  784. text:row.EditReason,
  785. time:row.ModifyTime,
  786. }
  787. this.isReasonDiaShow = true
  788. },
  789. /* 初始化默认tab 表格列和操作 */
  790. init() {
  791. this.default_tab = this.$route.query.act_tab ? this.$route.query.act_tab : this.Role === 'admin' ? 3 : 1;
  792. this.tableColums = tableColums(this.default_tab);
  793. this.handleArr = handleArr(this.default_tab);
  794. },
  795. // 提交参会名单
  796. submitAttendees(row,type){
  797. type==='查看'? (this.isParticipateShow = true) : (this.isAddParticipateShow = true)
  798. this.currentRsCalendarId = row.RsCalendarId
  799. this.currentResearcherId = row.ResearcherId
  800. },
  801. },
  802. mounted() {
  803. this.init();
  804. },
  805. };
  806. </script>
  807. <style lang="scss">
  808. .my-calendar {
  809. .my-calendar-list {
  810. .top-wrap{
  811. display: flex;
  812. .filter-wrap{
  813. flex: 1;
  814. display: flex;
  815. align-items: center;
  816. gap: 0 5px;
  817. }
  818. }
  819. .tabs-type {
  820. flex-shrink: 0;
  821. display: flex;
  822. align-items: center;
  823. .type-item {
  824. border-bottom: 3px solid transparent;
  825. font-size: 16px;
  826. margin-right: 40px;
  827. padding: 4px 0;
  828. cursor: pointer;
  829. &.act {
  830. font-size: 18px;
  831. color: #000;
  832. font-weight: 600;
  833. border-color: #409EFF;
  834. }
  835. }
  836. }
  837. }
  838. .my-calendar-context {
  839. margin-top: 20px;
  840. .left-title {
  841. font-weight: 700;
  842. line-height: 40px;
  843. font-size: 16px;
  844. }
  845. }
  846. .reason-dialog-container{
  847. .form-item{
  848. display: flex;
  849. justify-content: space-between;
  850. margin:0 30px 30px;
  851. p{
  852. margin-top: 15px;
  853. word-break: keep-all;
  854. }
  855. .reason{
  856. margin-left: 15px;
  857. textarea{
  858. width:100%;
  859. resize: none;
  860. padding:5px;
  861. box-sizing: border-box;
  862. color: #999;
  863. }
  864. .hint{
  865. display: inline-block;
  866. margin-top: 5px;
  867. color:#999;
  868. }
  869. }
  870. }
  871. }
  872. }
  873. .company-tip-poper {
  874. max-width: 400px;
  875. }
  876. </style>