mixin.js 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  1. import {
  2. researcherList,
  3. telTypes,
  4. companyInfo
  5. } from '@/api/roadshow/index.js';
  6. import { getDefaultOption } from './common.js';
  7. import { areaList } from '../utils/area.js';
  8. const moment = require('../utils/_moment.js');
  9. moment.locale('zh-cn');
  10. export default {
  11. data() {
  12. return {
  13. edit_id: '',//编辑活动id
  14. edit_rs_id: '',//编辑人id
  15. formData: {
  16. activityType: '',
  17. activityClass: '', // 活动类别
  18. roadshowType: '', // 路演/会议 形式
  19. roadshowPlatform: '', // 路演/会议 平台
  20. roadshowCity: '', // 路演/会议城市
  21. companyId: 0, // 客户id
  22. companyName: '', // 客户名称
  23. meetingTheme: '', // 会议主题
  24. partnersName: '', // 合作方名称
  25. selectResearchers: [
  26. {
  27. researcherId: '',
  28. startTime: '',
  29. endTime: '',
  30. }
  31. ], // 选择的研究员
  32. },
  33. isActivityPicker: false, //活动类型弹窗
  34. isResearcherPicker: false, //研究员弹窗
  35. isTimePicker: false, //时间弹窗
  36. isAreaPicker: false, //地区弹窗
  37. isRoadshowTypePicker: false, //路演/会议形式弹窗
  38. isActivityClassPicker: false,//活动类别弹窗
  39. rs_picker: {
  40. firstindex:0,
  41. id:[],//选择研究员块级标识
  42. },
  43. pickerForm: {
  44. time: '',//时间默认
  45. area:'',//地区默认
  46. }, //picker的默认选中
  47. selectObj: {}, //选中的日期信息 下标
  48. selectRsIndex: '', //选中的研究员下标
  49. weekMap: new Map([
  50. ['1','周一'],
  51. ['2','周二'],
  52. ['3','周三'],
  53. ['4','周四'],
  54. ['5','周五'],
  55. ['6','周六'],
  56. ['7','周日']
  57. ]),
  58. activiytyTypes: [],//活动类型
  59. researcherList: [],//研究员列表
  60. telTypeList: [],//电话会类别
  61. areaList,//地区数据
  62. companyInfo: null,//客户信息
  63. }
  64. },
  65. computed: {
  66. /* 动态前缀 路演/会议 */
  67. dynamic_prefix() {
  68. return this.formData.activityType === '路演' ? '路演' : '会议';
  69. },
  70. // 新增的研究员的索引数组
  71. addResearchersIdx() {
  72. return this.formData.selectResearchers.map((item, index) => index).slice(1);
  73. },
  74. },
  75. watch: {
  76. },
  77. methods: {
  78. /* 获取研究员列表 */
  79. async getResearcherList() {
  80. const res = await researcherList();
  81. if (res.code !== 200) return
  82. this.researcherList = res.data.map(group => ({
  83. ...group,
  84. text: group.GroupName,
  85. children: group.ResearcherList ? group.ResearcherList.map(child => ({
  86. ...child,
  87. text: child.RealName,
  88. id: child.AdminId
  89. })) : []
  90. }));
  91. },
  92. /* 获取客户信息 */
  93. async getCompanyInfo() {
  94. const res = await companyInfo({
  95. CompanyId: this.formData.companyId
  96. })
  97. if(res.code !== 200) return
  98. this.companyInfo = res.data;
  99. this.formData.companyName = res.data.CompanyName;
  100. },
  101. /* 获取电话会类别 */
  102. async getTelType() {
  103. const { code,data } = await telTypes();
  104. if (code !== 200) return
  105. this.telTypeList = data[0].ChildList.map(_ => _.ActivityTypeName);
  106. },
  107. /* 新增活动成功后操作 */
  108. addActivityLink({text,content,link,query}) {
  109. uni.showModal({
  110. title:text,
  111. content,
  112. confirmText:'去查看',
  113. cancelColor: '#A9AFB8',
  114. confirmColor: '#3385FF',
  115. success: function(res) {
  116. if(res.confirm){
  117. uni.redirectTo({
  118. url:`${link}?type=${query.type}`,
  119. })
  120. }else {
  121. uni.navigateBack({
  122. delta:1
  123. })
  124. }
  125. }
  126. })
  127. },
  128. /* 添加研究员 */
  129. addResearcherHandle() {
  130. const {
  131. startTime,
  132. endTime
  133. } =
  134. this.formData.selectResearchers[0]; //默认添加时间同步
  135. this.formData.selectResearchers.push({
  136. researcherId: null,
  137. startTime,
  138. endTime,
  139. });
  140. },
  141. // 删除研究员
  142. delResearcherHandle(index) {
  143. this.formData.selectResearchers.splice(index, 1);
  144. },
  145. /* 取消 */
  146. cancelHandle() {
  147. uni.navigateBack({
  148. delta:1
  149. })
  150. },
  151. findName(id) {
  152. const flat_arr = JSON.parse(JSON.stringify(this.researcherList))
  153. .map((item) => item.ResearcherList || [])
  154. .flat(Infinity);
  155. return flat_arr.find((user) => user.AdminId === id)
  156. ? flat_arr.find((user) => user.AdminId === id).RealName
  157. : '';
  158. },
  159. /* 选择活动 */
  160. confirmActivityType({detail}) {
  161. this.formData.activityType = detail.value;
  162. this.initOtherForm();
  163. this.isActivityPicker = false;
  164. },
  165. /* 切换类型时重置部分表单 */
  166. initOtherForm() {
  167. const {
  168. RoleTypeCode
  169. } = JSON.parse(uni.getStorageSync('userInfo')) || null;
  170. const {
  171. defaultActivityType,
  172. activityTypeList,
  173. startTime,
  174. endTime
  175. } = getDefaultOption(RoleTypeCode, 2);
  176. this.formData.roadshowType = '';
  177. this.formData.roadshowPlatform = '';
  178. this.formData.roadshowCity = '';
  179. this.formData.companyId = 0;
  180. this.formData.companyName = '';
  181. this.formData.meetingTheme = '';
  182. this.formData.partnersName = '';
  183. this.formData.activityClass = '';
  184. this.companyInfo = '';
  185. this.formData.selectResearchers = [
  186. {
  187. researcherId: '',
  188. startTime: startTime,
  189. endTime: endTime,
  190. },
  191. ];
  192. },
  193. /* 选择活动类别 */
  194. confirmActivityClass({detail}) {
  195. this.formData.activityClass = detail.value;
  196. this.isActivityClassPicker = false;
  197. },
  198. /* 前往客户搜索 */
  199. goSearchCompany() {
  200. uni.navigateTo({
  201. url: `/pages-approve/search/index?type=roadshow`
  202. })
  203. },
  204. /* 选择研究员弹窗展开 */
  205. clickRsChoose(index) {
  206. if(this.edit_id) return;
  207. this.isResearcherPicker = true;
  208. this.rs_picker= {
  209. firstindex:0,
  210. id: this.formData.selectResearchers[index].researcherId ? this.formData.selectResearchers[index].researcherId.map(item => item) : []//选择研究员块级标识
  211. }
  212. this.selectRsIndex = index;
  213. },
  214. /* 选择研究员分组 */
  215. clickFirstHandle({detail}) {
  216. this.rs_picker.firstindex = detail.index;
  217. },
  218. /* 选择研究员项 路演 公开会议为单选 其余多选*/
  219. clickItemHandle({detail}) {
  220. const { activityType } = this.formData;
  221. if(['内部会议', '报告电话会'].includes(activityType)) {
  222. let index = this.rs_picker.id.indexOf(detail.AdminId);
  223. index > -1 ? this.rs_picker.id.splice(index, 1) : this.rs_picker.id.push(detail.AdminId);
  224. }else {
  225. this.rs_picker.id = detail.AdminId;
  226. }
  227. },
  228. /* 取消选择研究员 */
  229. cancelResearcher() {
  230. this.rs_picker = {
  231. firstindex: 0,
  232. id: []
  233. }
  234. this.isResearcherPicker = false;
  235. },
  236. /* 选择研究员确认 */
  237. confirmResearcher() {
  238. console.log('确认选择')
  239. this.formData.selectResearchers[this.selectRsIndex].researcherId = this.rs_picker.id;
  240. this.isResearcherPicker = false;
  241. },
  242. /* 研究员显示格式化为名字 */
  243. formatRsLable(arr) {
  244. if(!arr) return '';
  245. if( arr instanceof Array ) {
  246. return arr.map(item => {
  247. return this.findName(item)
  248. })
  249. }else {
  250. return this.findName(arr)
  251. }
  252. },
  253. /* 选择路演/会议形式 重置城市平台 */
  254. confirmRoadshowType({
  255. detail
  256. }) {
  257. this.formData.roadshowType = detail.value;
  258. this.formData.roadshowPlatform = '';
  259. this.formData.roadshowCity = '';
  260. this.isRoadshowTypePicker = false;
  261. },
  262. /* 选择地区弹窗 */
  263. clickAreaChoose() {
  264. const city = this.formData.roadshowCity.length ? this.formData.roadshowCity[1] : '';
  265. let cityCode = '';
  266. if(city) for(let i in this.areaList.city_list) {
  267. if(this.areaList.city_list[i] === city){
  268. cityCode = String(i);
  269. break;
  270. }
  271. }
  272. // console.log(cityCode)
  273. this.pickerForm.area = cityCode;
  274. this.isAreaPicker = true
  275. },
  276. /* 选择地区 */
  277. confirmArea({detail}) {
  278. const { values } = detail;
  279. this.formData.roadshowCity = values.map(item => item.name);
  280. this.isAreaPicker = false;
  281. },
  282. /* 点击选择时间 */
  283. clickTimeChoose(index, type) {
  284. console.log(this.formData.selectResearchers[index])
  285. this.pickerForm.time = type === 'start' ? this.formData.selectResearchers[index].startTime : this.formData.selectResearchers[index].endTime;
  286. this.selectObj = {
  287. index,
  288. type
  289. }
  290. setTimeout(() => {
  291. this.isTimePicker = true;
  292. })
  293. },
  294. /* 选择时间 */
  295. confirmTime({detail}) {
  296. // console.log(val)
  297. const {
  298. index,
  299. type
  300. } = this.selectObj;
  301. if (type === 'start') {
  302. this.formData.selectResearchers[index].startTime = detail;
  303. } else {
  304. this.formData.selectResearchers[index].endTime = detail;
  305. }
  306. this.isTimePicker = false;
  307. this.pickerForm.time = '';
  308. },
  309. /* 添加完成后 拼接动态内容 */
  310. setDynamicLink(type) {
  311. switch (type) {
  312. case '内部会议' : return {
  313. text: '添加成功,已加入研究员日历',
  314. content: `可前往【我的日历】-【${type}】查看`,
  315. link: '/pages-approve/activity/list',
  316. query: {
  317. type
  318. },
  319. }
  320. case '报告电话会' : return {
  321. text: '添加成功,已加入研究员日历',
  322. content: `可前往【我的日历】-【${type}】查看`,
  323. link: '/pages-approve/activity/list',
  324. query: {
  325. type
  326. },
  327. }
  328. case '路演' : return {
  329. text: '活动申请已提交,请等待研究员处理',
  330. content: `可前往【我的日历】-【活动申请】查看`,
  331. link: '/pages-approve/activity/list',
  332. query: {
  333. type: '活动申请'
  334. },
  335. }
  336. case '公开会议' : return {
  337. text: '活动申请已提交,请等待研究员处理',
  338. content: `可前往【我的日历】-【活动申请】查看`,
  339. link: '/pages-approve/activity/list',
  340. query: {
  341. type: '活动申请'
  342. },
  343. }
  344. }
  345. },
  346. /* 绑定input输入value */
  347. bindInputHandle(key,{detail}) {
  348. this.formData[key] = detail;
  349. },
  350. /* 格式化时间显示 */
  351. formatterLabelTime(val) {
  352. if(!val) return '';
  353. const date = moment(val).format('MM.DD(ddd) HH:mm');
  354. return date;
  355. },
  356. /* 格式化弹窗时间显示 */
  357. formatterPickerTime(type, val) {
  358. switch (type) {
  359. case 'year':
  360. return val + '年';
  361. case 'month':
  362. return val + '月';
  363. case 'day':
  364. return val + '日';
  365. case 'hour':
  366. return val + '时';
  367. case 'minute':
  368. return val + '分';
  369. }
  370. }
  371. }
  372. }