myCalendar.vue 28 KB

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