|
@@ -0,0 +1,335 @@
|
|
|
+<template>
|
|
|
+ <view class="addactiyity-container">
|
|
|
+ <van-form>
|
|
|
+ <van-field
|
|
|
+ :value="formData.activityType"
|
|
|
+ is-link
|
|
|
+ readonly
|
|
|
+ clickable
|
|
|
+ name="picker"
|
|
|
+ label="活动类型"
|
|
|
+ placeholder="选择活动类型"
|
|
|
+ @click.native="
|
|
|
+ () => {
|
|
|
+ isActivityPicker = true;
|
|
|
+ }
|
|
|
+ "
|
|
|
+ />
|
|
|
+ <van-field :value="formData.meetingTheme" clickable label="会议主题" type="textarea" rows="1" autosize placeholder="请输入会议主题" @change="bindInputHandle('meetingTheme', $event)" />
|
|
|
+ <van-field :value="formData.companyName" is-link readonly clickable label="客户名称" placeholder="客户名称" @click.native="goSearchCompany" />
|
|
|
+ <van-field
|
|
|
+ :value="formatSellerLable(formData.sellerUser)"
|
|
|
+ is-link
|
|
|
+ readonly
|
|
|
+ clickable
|
|
|
+ name="picker"
|
|
|
+ label="销售"
|
|
|
+ type="textarea"
|
|
|
+ rows="1"
|
|
|
+ autosize
|
|
|
+ placeholder="选择销售员"
|
|
|
+ @click.native="clickRsChoose(0)"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ :value="formatterLabelTime(formData.selectResearchers[0].startTime)"
|
|
|
+ is-link
|
|
|
+ readonly
|
|
|
+ clickable
|
|
|
+ name="datetimePicker"
|
|
|
+ label="开始时间"
|
|
|
+ placeholder="选择开始时间"
|
|
|
+ @click.native="clickTimeChoose(0, 'start')"
|
|
|
+ />
|
|
|
+
|
|
|
+ <van-field
|
|
|
+ :value="formatterLabelTime(formData.selectResearchers[0].endTime)"
|
|
|
+ is-link
|
|
|
+ readonly
|
|
|
+ clickable
|
|
|
+ name="datetimePicker"
|
|
|
+ label="结束时间"
|
|
|
+ placeholder="选择结束时间"
|
|
|
+ @click.native="clickTimeChoose(0, 'end')"
|
|
|
+ />
|
|
|
+ </van-form>
|
|
|
+
|
|
|
+ <div class="submit-bot">
|
|
|
+ <van-button type="primary" plain color="#3385FF" class="btn" size="small" block round @click="cancelHandle">取消</van-button>
|
|
|
+ <van-button type="primary" color="#3385FF" class="btn" size="small" block round @click="submitFiccHandle">确定</van-button>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 选择活动类型 -->
|
|
|
+ <van-popup :show="isActivityPicker" position="bottom">
|
|
|
+ <van-picker show-toolbar :columns="activiytyTypes" :default-index="activiytyTypes.indexOf(formData.activityType)" @confirm="confirmActivityType" @cancel="isActivityPicker = false" />
|
|
|
+ </van-popup>
|
|
|
+
|
|
|
+ <!-- 选择时间 -->
|
|
|
+ <van-popup :show="isTimePicker" position="bottom">
|
|
|
+ <van-datetime-picker
|
|
|
+ :value="pickerForm.time"
|
|
|
+ type="datetime"
|
|
|
+ :formatter="formatterPickerTime"
|
|
|
+ @confirm="confirmTime"
|
|
|
+ @cancel="
|
|
|
+ () => {
|
|
|
+ isTimePicker = false;
|
|
|
+ pickerForm.time = '';
|
|
|
+ }
|
|
|
+ "
|
|
|
+ />
|
|
|
+ </van-popup>
|
|
|
+
|
|
|
+ <!-- 选择销售 -->
|
|
|
+ <van-popup :show="isResearcherPicker" position="bottom">
|
|
|
+ <view class="select-rs-header">
|
|
|
+ <text class="cancel" @click="cancelResearcher">取消</text>
|
|
|
+ <text class="ensure" @click="confirmResearcher">确认</text>
|
|
|
+ </view>
|
|
|
+ <van-tree-select :items="ficcSellerList" :main-active-index="rs_picker.firstindex" :active-id="rs_picker.id" @click-nav="clickFirstHandle" @click-item="clickItemHandle" />
|
|
|
+ </van-popup>
|
|
|
+ </view>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import { addActivityFicc, sellerFiccList } from "@/api/roadshow/index.js";
|
|
|
+import { getDefaultOption } from "./common.js";
|
|
|
+import { validateForm } from "../utils/validate.js";
|
|
|
+import mixin from "./mixin.js";
|
|
|
+const moment = require("../utils/_moment.js");
|
|
|
+moment.locale("zh-cn");
|
|
|
+export default {
|
|
|
+ mixins: [mixin],
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ formData: {
|
|
|
+ activityType: "参会", // 活动类型
|
|
|
+ meetingTheme: "", // 会议主题
|
|
|
+ companyName: "", // 客户名称
|
|
|
+ sellerUser: "", // 销售
|
|
|
+ companyId: "", //客户ID
|
|
|
+ englishCompany: "",
|
|
|
+ selectResearchers: [
|
|
|
+ {
|
|
|
+ researcherId: "",
|
|
|
+ startTime: "",
|
|
|
+ endTime: "",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ }, // 表单数据
|
|
|
+ activiytyTypes: ["参会", "拜访"],
|
|
|
+ ficcSellerList: [],
|
|
|
+ };
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ // 初始化处理时间
|
|
|
+ initDefaultTime() {
|
|
|
+ const now = new Date();
|
|
|
+ const start = new Date(now.setHours(9, 0, 0, 0)); // 今天上午9:00
|
|
|
+ const end = start.getTime() + 60 * 60 * 1000; // 加1小时
|
|
|
+
|
|
|
+ this.formData.selectResearchers[0].startTime = start.getTime();
|
|
|
+ this.formData.selectResearchers[0].endTime = end;
|
|
|
+ },
|
|
|
+ /* 提交表单 */
|
|
|
+ async submitFiccHandle() {
|
|
|
+ let isCheck = validateForm(this.formData.activityType, this.formData);
|
|
|
+ if (!isCheck) return;
|
|
|
+
|
|
|
+ let parmas = {
|
|
|
+ ActivityType: this.formData.activityType,
|
|
|
+ Theme: this.formData.meetingTheme,
|
|
|
+ CompanyId: this.formData.companyId || 0,
|
|
|
+ CompanyName: this.formData.companyName || "",
|
|
|
+
|
|
|
+ SellerId: this.formData.sellerUser.toString(),
|
|
|
+ SellerName: this.formatSellerLable(this.formData.sellerUser),
|
|
|
+ StartDate: moment(this.formData.selectResearchers[0].startTime).format("YYYY-MM-DD"),
|
|
|
+ EndDate: moment(this.formData.selectResearchers[0].endTime).format("YYYY-MM-DD"),
|
|
|
+ StartTime: moment(this.formData.selectResearchers[0].startTime).format("HH:mm:ss"),
|
|
|
+ EndTime: moment(this.formData.selectResearchers[0].endTime).format("HH:mm:ss"),
|
|
|
+ StartWeek: moment(this.formData.selectResearchers[0].startTime).format("ddd"),
|
|
|
+ EndWeek: moment(this.formData.selectResearchers[0].endTime).format("ddd"),
|
|
|
+
|
|
|
+ EnglishCompany: 0,
|
|
|
+ };
|
|
|
+
|
|
|
+ const res = await addActivityFicc(parmas);
|
|
|
+
|
|
|
+ if (res.code !== 200) return;
|
|
|
+ let link = {
|
|
|
+ text: "添加成功,已加入销售员日历",
|
|
|
+ content: `可前往【我的日历】-【 活动 】查看`,
|
|
|
+ link: "/pages-roadshow/myCalendar/index",
|
|
|
+ query: {
|
|
|
+ type: "活动",
|
|
|
+ },
|
|
|
+ };
|
|
|
+ this.addActivityLink(link);
|
|
|
+ },
|
|
|
+ async getSellerList() {
|
|
|
+ const res = await sellerFiccList();
|
|
|
+ if (res.code === 200) {
|
|
|
+ const ficcList = this.formatSellerList(res.data.List || []);
|
|
|
+ this.ficcSellerList = ficcList;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ formatSellerList(list) {
|
|
|
+ list.forEach((group) => {
|
|
|
+ // 对组做处理
|
|
|
+ group.text = group.GroupName;
|
|
|
+ group.value = group.GroupId;
|
|
|
+ group.id = group.GroupId;
|
|
|
+ // 如果有列表
|
|
|
+ if (group.Child) {
|
|
|
+ group.Child.forEach((item) => {
|
|
|
+ item.text = item.AdminName;
|
|
|
+ item.value = item.AdminId;
|
|
|
+ item.id = item.AdminId;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ group.children = group.Child || [];
|
|
|
+ });
|
|
|
+ return list;
|
|
|
+ },
|
|
|
+ formatSellerLable(val) {
|
|
|
+ let userName = [];
|
|
|
+ const result = this.ficcSellerList.flatMap((group) =>
|
|
|
+ group.Child
|
|
|
+ ? group.Child.map((child) => ({
|
|
|
+ ...child,
|
|
|
+ GroupName: group.GroupName,
|
|
|
+ }))
|
|
|
+ : []
|
|
|
+ );
|
|
|
+ result.forEach((item) => {
|
|
|
+ if (val.includes(item.AdminId)) {
|
|
|
+ userName.push(item.AdminName);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return userName.toString();
|
|
|
+ },
|
|
|
+ },
|
|
|
+
|
|
|
+ onLoad(options) {
|
|
|
+ this.initDefaultTime();
|
|
|
+ },
|
|
|
+
|
|
|
+ onShow() {
|
|
|
+ this.getSellerList();
|
|
|
+ if (uni.getStorageSync("roadshow_compantyId")) {
|
|
|
+ this.formData.companyId = Number(uni.getStorageSync("roadshow_compantyId"));
|
|
|
+ this.formData.englishCompany = Number(uni.getStorageSync("roadshow_isEnglishCompany"));
|
|
|
+ this.getCompanyInfo();
|
|
|
+ uni.removeStorageSync("roadshow_compantyId");
|
|
|
+ uni.removeStorageSync("roadshow_isEnglishCompany");
|
|
|
+ }
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ "formData.selectResearchers": {
|
|
|
+ handler(val) {
|
|
|
+ if (val[0].startTime && this.selectObj.type == "start") {
|
|
|
+ this.formData.selectResearchers[0].endTime = val[0].startTime + 3600000;
|
|
|
+ } else if (val[0].endTime <= val[0].startTime && this.selectObj.type == "end") {
|
|
|
+ uni.showToast({
|
|
|
+ title: "结束时间不能早于或等于开始时间",
|
|
|
+ icon: "none",
|
|
|
+ });
|
|
|
+ this.formData.selectResearchers[0].endTime = val[0].startTime + 3600000;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ deep: true,
|
|
|
+ },
|
|
|
+ },
|
|
|
+};
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+.addactiyity-container {
|
|
|
+ padding-bottom: 200rpx;
|
|
|
+
|
|
|
+ .add-user-btn {
|
|
|
+ background-color: #fff;
|
|
|
+ margin-top: 20rpx;
|
|
|
+ padding: 20rpx 0;
|
|
|
+ color: #3385ff;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .del-cont {
|
|
|
+ font-size: 50rpx;
|
|
|
+ color: #f00;
|
|
|
+ display: flex;
|
|
|
+ justify-content: flex-end;
|
|
|
+ padding: 10rpx 30rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .submit-bot {
|
|
|
+ position: fixed;
|
|
|
+ left: 0;
|
|
|
+ right: 0;
|
|
|
+ bottom: 0;
|
|
|
+ z-index: 99;
|
|
|
+ height: 140rpx;
|
|
|
+ padding: 0 150rpx;
|
|
|
+ background-color: #fff;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ padding-bottom: constant(safe-area-inset-bottom);
|
|
|
+ padding-bottom: env(safe-area-inset-bottom);
|
|
|
+ box-shadow: 0px -2px 6px rgba(110, 119, 141, 0.07);
|
|
|
+
|
|
|
+ .btn {
|
|
|
+ // width: 100%;
|
|
|
+ width: 260rpx;
|
|
|
+ height: 60rpx;
|
|
|
+ margin-right: 30rpx;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .select-rs-header {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+ padding: 30rpx 20rpx;
|
|
|
+
|
|
|
+ .cancel {
|
|
|
+ color: #969799;
|
|
|
+ }
|
|
|
+
|
|
|
+ .ensure {
|
|
|
+ color: #576b95;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|
|
|
+<style lang="scss">
|
|
|
+.addactiyity-container {
|
|
|
+ .van-tree-select {
|
|
|
+ .van-tree-select__item--active {
|
|
|
+ color: #1989fa !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ .van-sidebar-item--selected {
|
|
|
+ border-color: #1989fa !important;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .van-tree-select__item {
|
|
|
+ font-weight: normal;
|
|
|
+ }
|
|
|
+
|
|
|
+ .company-info {
|
|
|
+ background: #d5e6ff;
|
|
|
+ padding: 10rpx 30rpx;
|
|
|
+ margin-bottom: 20rpx;
|
|
|
+ view {
|
|
|
+ margin: 12rpx 0;
|
|
|
+ color: #666;
|
|
|
+ text-indent: -140rpx;
|
|
|
+ margin-left: 140rpx;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|