vipNewActive.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  1. <template>
  2. <div class="m-container">
  3. <h2>VIP活动方案新增 <div class="squrt"></div>
  4. </h2>
  5. <div class="m-core">
  6. <el-form :label-position="labelPosition"
  7. :model="vipform"
  8. ref='vipform'
  9. :rules='vipformRules'
  10. class="vipform">
  11. <el-form-item label="活动名称"
  12. prop="name">
  13. <el-input style="width:400px"
  14. v-model="vipform.name"></el-input>
  15. </el-form-item>
  16. <el-form-item label="活动描述"
  17. prop="desc">
  18. <el-input type="textarea"
  19. v-model="vipform.desc"
  20. style="width:400px"
  21. :rows="5"
  22. placeholder="请输入活动说明"></el-input>
  23. </el-form-item>
  24. <el-form-item label="活动时间"
  25. prop="activeTime">
  26. <el-date-picker v-model="vipform.activeTime"
  27. type="datetimerange"
  28. range-separator="至"
  29. value-format="yyyy-MM-dd HH:mm:ss"
  30. start-placeholder="开始日期"
  31. end-placeholder="结束日期">
  32. </el-date-picker>
  33. </el-form-item>
  34. <el-form-item label="课程时间"
  35. prop="courseTime">
  36. <el-date-picker v-model="vipform.courseTime"
  37. type="datetimerange"
  38. range-separator="至"
  39. value-format="yyyy-MM-dd HH:mm:ss"
  40. start-placeholder="开始日期"
  41. end-placeholder="结束日期">
  42. </el-date-picker>
  43. </el-form-item>
  44. <el-form-item label="课程形式"
  45. prop="stauts">
  46. <el-select v-model="vipform.stauts"
  47. multiple>
  48. <el-option v-for="(item,index) in courseStatusList"
  49. :key='index'
  50. :value="item.id"
  51. :label="item.name"></el-option>
  52. </el-select>
  53. </el-form-item>
  54. </el-form>
  55. <div class="activeRange">
  56. <div class="left">
  57. <p>活动适用范围&结算标准:</p>
  58. </div>
  59. <div class="right">
  60. <div class="chioseWrap">
  61. <el-checkbox label="线上课"
  62. v-model="online"></el-checkbox>
  63. <el-select v-model="onlineSalary">
  64. <el-option label="老师默认课酬"
  65. value="TEACHER_DEFAULT"></el-option>
  66. <el-option label="课程单价比例折扣"
  67. value="RATIO_DISCOUNT"></el-option>
  68. <el-option label="固定课酬"
  69. value="FIXED_SALARY"></el-option>
  70. </el-select>
  71. <el-input placeholder="请输入"
  72. style="width:100px"
  73. type="number"
  74. v-if='onlineSalary!= 1'
  75. v-model="onlineprice"></el-input>
  76. </div>
  77. <div class="chioseWrap">
  78. <el-checkbox label="线下课"
  79. v-model="unonline"></el-checkbox>
  80. <el-select v-model="unonlineSalary">
  81. <el-option label="老师默认课酬"
  82. value="TEACHER_DEFAULT"></el-option>
  83. <el-option label="课程单价比例折扣"
  84. value="RATIO_DISCOUNT"></el-option>
  85. <el-option label="固定课酬"
  86. value="FIXED_SALARY"></el-option>
  87. </el-select>
  88. <el-input placeholder="请输入"
  89. style="width:100px"
  90. v-if='unonlineSalary!= 1'
  91. type="number"
  92. v-model="unonlineprice"></el-input>
  93. </div>
  94. <div class="chioseWrap">
  95. <el-checkbox v-model="salaryReadonlyFlag"
  96. label="可自定义收费、结算标准"></el-checkbox>
  97. </div>
  98. </div>
  99. </div>
  100. <div class="activeType">
  101. <div class="left">
  102. <p>活动类型</p>
  103. </div>
  104. <div class="right">
  105. <div>
  106. <div class="head"
  107. :class="activeType=='BASE_ACTIVITY'?'active':''"
  108. @click="activeType='BASE_ACTIVITY'">基础活动</div>
  109. <p class="title"
  110. v-if="activeType=='BASE_ACTIVITY'">课程原价</p>
  111. </div>
  112. <div>
  113. <div class="head"
  114. :class="activeType=='DISCOUNT'?'active':''"
  115. @click="activeType='DISCOUNT'">折扣</div>
  116. <el-input v-if="activeType=='DISCOUNT'"
  117. v-model="attribute1"
  118. placeholder="请输入折扣数值"></el-input>
  119. </div>
  120. <div>
  121. <div class="head"
  122. :class="activeType=='GIVE_CLASS'?'active':''"
  123. @click="activeType='GIVE_CLASS'">赠送课时</div>
  124. <el-input placeholder="多少节开始赠"
  125. v-if="activeType=='GIVE_CLASS'"
  126. v-model="attribute1"
  127. style='margin-right:10px;'></el-input> <span v-if="activeType=='GIVE_CLASS'">赠</span>
  128. <el-input v-if="activeType=='GIVE_CLASS'"
  129. placeholder="请输入赠送课时数"
  130. v-model="attribute2"
  131. style='margin:0 10px;'></el-input>
  132. <el-checkbox v-if="activeType=='GIVE_CLASS'"
  133. v-model="giveClassPaySalaryFlag"
  134. label="赠送课时是否结算课酬"></el-checkbox>
  135. </div>
  136. </div>
  137. </div>
  138. </div>
  139. <div class="btnWrap">
  140. <div class="closeBtn">取消</div>
  141. <div class="okBtn"
  142. @click='submitFrom'>确定</div>
  143. </div>
  144. </div>
  145. </template>
  146. <script>
  147. import { vipGroupCategory, addVipActive } from '@/api/vipSeting'
  148. export default {
  149. data () {
  150. return {
  151. labelPosition: 'left',
  152. vipform: {
  153. name: '',
  154. desc: '',
  155. activeTime: [],
  156. courseTime: [],
  157. },
  158. vipformRules: {
  159. name: [{ required: true, message: '请输入活动名称', trigger: 'blur' },
  160. { min: 1, max: 25, message: '长度在 1 到 25 个字符', trigger: 'blur' }],
  161. desc: [{ required: true, message: '请输入文字描述', trigger: 'blur' },
  162. { min: 1, max: 200, message: '长度在 1 到 200 个字符', trigger: 'blur' }],
  163. activeTime: [{ required: true, message: '请选择活动时间', trigger: 'blur' }],
  164. courseTime: [{ required: true, message: '请选择课程时间', trigger: 'blur' }],
  165. },
  166. courseStatusList: [], // 获取所有课程形式
  167. activeType: '',
  168. online: true,
  169. unonline: true,
  170. onlineSalary: 'TEACHER_DEFAULT',
  171. unonlineSalary: 'TEACHER_DEFAULT',
  172. onlineprice: '',
  173. unonlineprice: '',
  174. salaryReadonlyFlag: true,
  175. attribute1: '',
  176. attribute2: '',
  177. attribute3: '',
  178. giveClassPaySalaryFlag: false
  179. }
  180. },
  181. mounted () {
  182. // 首先获取课程形式
  183. vipGroupCategory().then(res => {
  184. // console.log(res);
  185. if (res.code == 200) {
  186. this.courseStatusList = res.data;
  187. }
  188. })
  189. },
  190. methods: {
  191. submitFrom () {
  192. this.$refs['vipform'].validate((valid) => {
  193. if (valid) {
  194. // 验证通过
  195. let coursesStartTime = this.vipform.courseTime[0];
  196. let coursesEndTime = this.vipform.courseTime[1];
  197. let startTime = this.vipform.activeTime[0];
  198. let endTime = this.vipform.activeTime[1];
  199. let organId = this.$store.getters.organ;
  200. let type = this.activeType;
  201. let vipGroupCategoryIdList = this.vipform.stauts.join(',')
  202. let onlineSalarySettlement;
  203. let offlineSalarySettlement;
  204. if (this.online) {
  205. // 勾选线上
  206. onlineSalarySettlement = {
  207. salarySettlementType: this.onlineSalary,
  208. settlementValue: this.onlineprice
  209. }
  210. } else {
  211. onlineSalarySettlement = null;
  212. }
  213. if (this.unonline) {
  214. // 勾选线下
  215. offlineSalarySettlement = {
  216. salarySettlementType: this.unonlineSalary,
  217. settlementValue: this.unonlineprice
  218. }
  219. } else {
  220. offlineSalarySettlement = null
  221. }
  222. let salaryReadonlyFlag = this.salaryReadonlyFlag * 1;
  223. let giveClassPaySalaryFlag = this.giveClassPaySalaryFlag * 1;
  224. let vipGroupSalarySettlement = {
  225. onlineSalarySettlement,
  226. offlineSalarySettlement
  227. }
  228. // 发请求创建活动
  229. addVipActive({
  230. coursesStartTime,
  231. coursesEndTime,
  232. startTime,
  233. endTime,
  234. name: this.vipform.name,
  235. description: this.vipform.desc,
  236. organId,
  237. type,
  238. vipGroupCategoryIdList,
  239. vipGroupSalarySettlement,
  240. salaryReadonlyFlag,
  241. giveClassPaySalaryFlag,
  242. attribute1: this.attribute1,
  243. attribute2: this.attribute2,
  244. attribute3: this.attribute3
  245. }).then(res => {
  246. if (res.code == 200) {
  247. this.$message({
  248. type: 'success',
  249. message: '恭喜你,活动创建成功'
  250. })
  251. }
  252. })
  253. } else {
  254. this.$message.error('请填写必要参数')
  255. }
  256. })
  257. // 线上线下课 勾选就传不勾选就不传
  258. // addVipActive().then(res => { })
  259. }
  260. },
  261. }
  262. </script>
  263. <style lang="scss" scoped>
  264. .m-core {
  265. font-size: 14px;
  266. width: 100%;
  267. display: flex;
  268. flex-direction: column;
  269. justify-content: center;
  270. // text-align: center;
  271. .activeRange {
  272. display: flex;
  273. flex-direction: row;
  274. justify-content: flex-start;
  275. .left {
  276. height: 72px;
  277. line-height: 72px;
  278. }
  279. .right {
  280. .chioseWrap {
  281. display: flex;
  282. flex-direction: row;
  283. justify-content: flex-start;
  284. height: 72px;
  285. line-height: 72px;
  286. align-items: center;
  287. .el-checkbox {
  288. margin-right: 20px;
  289. }
  290. .el-select {
  291. margin-right: 20px;
  292. }
  293. }
  294. }
  295. }
  296. .activeType {
  297. display: flex;
  298. flex-direction: row;
  299. justify-content: flex-start;
  300. .left {
  301. margin-right: 20px;
  302. p {
  303. height: 40px;
  304. line-height: 40px;
  305. }
  306. }
  307. .right {
  308. > div {
  309. display: flex;
  310. flex-direction: row;
  311. justify-content: flex-start;
  312. height: 40px;
  313. line-height: 40px;
  314. margin-bottom: 20px;
  315. .head {
  316. width: 120px;
  317. height: 40px;
  318. line-height: 40px;
  319. border: 1px solid #ccc;
  320. text-align: center;
  321. border-radius: 5px;
  322. cursor: pointer;
  323. margin-right: 10px;
  324. }
  325. > .head.active {
  326. background-color: #13817a;
  327. color: #fff;
  328. border: none;
  329. }
  330. .title {
  331. line-height: 40px;
  332. height: 40px;
  333. }
  334. }
  335. }
  336. }
  337. }
  338. </style>
  339. <style lang="scss">
  340. .m-core {
  341. .vipform {
  342. .el-select {
  343. width: 400px !important;
  344. .el-input__inner {
  345. width: 400px;
  346. }
  347. }
  348. }
  349. .activeType {
  350. .right {
  351. .el-input {
  352. width: 150px !important;
  353. }
  354. }
  355. }
  356. }
  357. </style>