planner.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510
  1. <!-- eslint-disable no-unused-vars -->
  2. <!--
  3. * _oo0oo_
  4. * o8888888o
  5. * 88" . "88
  6. * (| -_- |)
  7. * 0\ = /0
  8. * ___/`---'\___
  9. * .' \\| |// '.
  10. * / \\||| : |||// \
  11. * / _||||| -:- |||||- \
  12. * | | \\\ - /// | |
  13. * | \_| ''\---/'' |_/ |
  14. * \ .-\__ '-' ___/-. /
  15. * ___'. .' /--.--\ `. .'___
  16. * ."" '< `.___\_<|>_/___.' >' "".
  17. * | | : `- \`.;`\ _ /`;.`/ - ` : | |
  18. * \ \ `_. \_ __\ /__ _/ .-` / /
  19. * =====`-.____`.___ \_____/___.-`___.-'=====
  20. * `=---='
  21. *
  22. *
  23. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  24. *
  25. * 佛祖保佑 永不宕机 永无BUG
  26. -->
  27. <template>
  28. <div class="warp12">
  29. <div class="statusBox">
  30. <cent-logo></cent-logo>
  31. <div class="personal infoBox">
  32. <div class="title">营销策划师</div>
  33. <div class="content">
  34. <div class="formBox">
  35. <el-form
  36. :model="plannerForm"
  37. :rules="plannerRules"
  38. :label-position="'top'"
  39. ref="ruleForm"
  40. label-width="150px"
  41. class="ruleForm">
  42. <div class="formTit">
  43. <span class="serialNumber">01</span>
  44. <span class="formName">个人信息</span>
  45. </div>
  46. <el-form-item label="账户名/电话号码" prop="username">
  47. <el-input maxlength="100" placeholder="请输入账户名/电话" v-model="plannerForm.username"></el-input>
  48. </el-form-item>
  49. <el-form-item label="姓名" prop="name">
  50. <el-input maxlength="100" placeholder="请输入姓名" v-model="plannerForm.name"></el-input>
  51. </el-form-item>
  52. <el-form-item label="电话号码" prop="phone">
  53. <el-input maxlength="100" placeholder="请输入电话号码" v-model="plannerForm.phone"></el-input>
  54. </el-form-item>
  55. <el-form-item label="邮箱" prop="email">
  56. <el-input maxlength="100" placeholder="请输入邮箱地址" v-model="plannerForm.email"></el-input>
  57. </el-form-item>
  58. <el-form-item label="性别" prop="sex">
  59. <el-radio-group v-model="plannerForm.sex">
  60. <el-radio :label="'男'">男</el-radio>
  61. <el-radio :label="'女'">女</el-radio>
  62. </el-radio-group>
  63. </el-form-item>
  64. <el-form-item label="店铺地址" prop="addres">
  65. <el-cascader
  66. ref="addressChange"
  67. size="large"
  68. :options="options"
  69. v-model="plannerForm.region"
  70. :props="{ checkStrictly: true, emitPath: false, label:'name', value: 'id', lazy: true, lazyLoad: lazyLoadAddres }"
  71. @change="addressChange">
  72. </el-cascader>
  73. </el-form-item>
  74. <el-form-item label="" prop="storeAddressDetail">
  75. <el-input maxlength="200" resize="none" placeholder="请输入详细地址" type="textarea" :rows="3" v-model="plannerForm.addres"></el-input>
  76. </el-form-item>
  77. <!-- <el-form-item label="合同状态" prop="contractState">
  78. <el-radio-group v-model="plannerForm.contractState">
  79. <el-radio :label="1">有效</el-radio>
  80. <el-radio :label="0">无效</el-radio>
  81. </el-radio-group>
  82. </el-form-item> -->
  83. <!-- <div class="dateBox idDateBox">
  84. <el-form-item label="合同有效期" prop="effectiveDate" class="businessDate">
  85. <el-date-picker
  86. type="daterange"
  87. @change="getTime"
  88. v-model="formTimer"
  89. start-placeholder="开始日期"
  90. format="yyyy 年 MM 月 dd 日"
  91. end-placeholder="结束日期"
  92. value-format="yyyy-MM-dd"
  93. :default-time="['00:00:00', '23:59:59']">
  94. </el-date-picker>
  95. </el-form-item>
  96. </div> -->
  97. <el-form-item label="选择分公司" prop="parentId" class="idType">
  98. <el-select v-model="plannerForm.parentId" placeholder="请在选择分公司前先选择好地址">
  99. <el-option
  100. v-for="item in conpanyList"
  101. :key="item.platformUserId"
  102. :label="item.name"
  103. :value="item.platformUserId">
  104. </el-option>
  105. </el-select>
  106. </el-form-item>
  107. <el-form-item label="入驻套餐" prop="packageId" class="idType">
  108. <el-select v-model="plannerForm.packageId" placeholder="请选择">
  109. <el-option
  110. v-for="item in setMealData"
  111. :key="item.id"
  112. :label="item.name"
  113. :value="item.id">
  114. </el-option>
  115. </el-select>
  116. </el-form-item>
  117. </el-form>
  118. <el-button
  119. class="submitBtn"
  120. @click="submitForm('ruleForm')"
  121. >提交</el-button>
  122. </div>
  123. </div>
  124. </div>
  125. </div>
  126. </div>
  127. </template>
  128. <script>
  129. import { listSearchMixin } from '@/config/mixin'
  130. import CentLogo from '@/components/centLogo'
  131. import api from '@/api'
  132. // import { unemptyArray } from '@/util/ArrayFunction'
  133. // import { regionData, CodeToText } from 'element-china-area-data' // 引入地区数据,现在使用的为线上接口的数据,已废弃
  134. export default {
  135. name: 'planner',
  136. mixins: [listSearchMixin],
  137. components: {
  138. CentLogo
  139. },
  140. data () {
  141. return {
  142. options: null,
  143. conpanyList: [],
  144. addresCode: '',
  145. formTimer: '',
  146. selectedOptions: [],
  147. setMealData: [],
  148. plannerForm: {
  149. username: '', // 账号
  150. name: '', // 姓名
  151. phone: '', // 电话号码
  152. email: '', // 邮箱
  153. sex: '男', // 性别
  154. region: '', // 区域编码
  155. addres: '', // 详细地址
  156. effectiveDate: '', // 生效日期 即时生效-设置当前时间 有值-指定日期生效
  157. effectiveYear: '', // 生效时限(年)
  158. contractState: '', // 合同状态 1-有效 0-无效
  159. type: '2', // 类型: 1为分公司 2为策划师
  160. parentId: '', // 父级ID 如果为分公司则为null
  161. packageId: '' // 套餐类型
  162. },
  163. SetMeal: [],
  164. plannerRules: {
  165. username: [
  166. { required: true, message: '请输入账号/电话', trigger: 'blur' }
  167. ],
  168. name: [
  169. { required: true, message: '请输入姓名', trigger: 'blur' }
  170. ],
  171. phone: [
  172. { required: true, message: '请输入电话号码', trigger: 'blur' },
  173. { validator: function (rule, value, callback) {
  174. if (!/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/.test(value) && value) {
  175. callback(new Error('请输入正确的电话号码'))
  176. } else {
  177. callback()
  178. }
  179. },
  180. trigger: 'blur' }
  181. ],
  182. email: [
  183. { required: true, message: '请输入邮箱', trigger: 'blur' },
  184. { type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }
  185. ],
  186. sex: [
  187. { required: true, message: '请选择性别', trigger: 'blur' }
  188. ],
  189. addres: [
  190. { required: true, message: '请选择地址', trigger: 'blur' }
  191. ],
  192. packageId: [
  193. { required: true, message: '请选择入驻套餐', trigger: 'blur' }
  194. ],
  195. parentId: [
  196. { required: true, message: '请选择分公司', trigger: 'blur' }
  197. ]
  198. }
  199. }
  200. },
  201. created () {
  202. this.sendReq({
  203. url: api.getTreeClass,
  204. method: 'GET',
  205. params: {}
  206. }, (res) => {
  207. // console.log(res) // 获取地址选择器数据并去除空的子项
  208. this.options = res.data
  209. })
  210. this.sendReq({
  211. url: api.getAdditional, // 套餐购买类型:1-商家,2-策划师 3-分公司
  212. method: 'GET',
  213. params: {
  214. type: 3
  215. }
  216. }, (res) => {
  217. // console.log(res) // 获取地址选择器数据并去除空的子项
  218. this.setMealData = res.data
  219. // console.log(this.options)
  220. })
  221. },
  222. methods: {
  223. submitForm (formName) {
  224. // console.log(this.plannerForm)
  225. this.$refs[formName].validate(valid => {
  226. if (valid) {
  227. let params = {
  228. url: api.subsidiaryCompanyCheck,
  229. method: 'POST',
  230. data: this.plannerForm
  231. }
  232. this.sendReq(params, (res) => {
  233. if (res.code === '200') {
  234. this.$message({
  235. message: '提交成功',
  236. type: 'success'
  237. })
  238. this.$router.push({path: '/status'})
  239. } else {
  240. this.$message({
  241. message: res.message,
  242. type: 'error'
  243. })
  244. }
  245. })
  246. } else {
  247. this.$message({
  248. message: '信息填写不完整!',
  249. type: 'warning'
  250. })
  251. return false
  252. }
  253. })
  254. },
  255. addressChange (arr) {
  256. // let cacheArray = []
  257. let datas = this.$refs.addressChange.getCheckedNodes(true)[0].data // 获取选中的节点数据
  258. // console.log(datas)
  259. this.sendReq({
  260. url: api.selectAnd,
  261. method: 'POST',
  262. data: {
  263. area: datas.id, // 地区编号
  264. type: 2,
  265. level: datas.level, // "区级别不能为空"
  266. page: 1,
  267. pageSize: 10
  268. }
  269. }, (res) => {
  270. this.conpanyList = res.data.list
  271. console.log(res)
  272. })
  273. },
  274. // !原本的接口需要传递时间信息,后面不许要的,先注释,待使用一段时间确认后删除
  275. // getTime (TimeValue = []) { // 获取有效时间并且转化为字符串,并计算出之间的有效年份
  276. // this.plannerForm.effectiveDate = TimeValue[0] + ' - ' + TimeValue[1]
  277. // let arr = TimeValue.map(item => {
  278. // return item.split('-')[0]
  279. // })
  280. // // console.log(arr[1], arr[0])
  281. // this.plannerForm.effectiveYear = arr[1] - arr[0]
  282. // // this.plannerForm.effectiveDate
  283. // },
  284. lazyLoadAddres (node, resolve) {
  285. // console.log(node)
  286. this.sendReq({
  287. url: api.getTreeOne,
  288. method: 'GET',
  289. params: {
  290. parentId: node.value
  291. }
  292. }, (res) => {
  293. resolve(res.data)
  294. })
  295. }
  296. }
  297. }
  298. </script>
  299. <style lang="less" scoped>
  300. .statusBox {
  301. position: relative;
  302. z-index: 1000;
  303. .infoBox {
  304. width: 100%;
  305. height: 700px;
  306. background: #ffffff;
  307. .title {
  308. background: #FAFAFA;
  309. width: 100%;
  310. height: 42px;
  311. line-height: 42px;
  312. text-align: center;
  313. border-bottom: 1px solid #E6E6E6;
  314. }
  315. .content {
  316. width: 100%;
  317. padding: 0 80px 50px 80px;
  318. height: 650px;
  319. overflow-y: auto;
  320. .formTit {
  321. height: 55px;
  322. display: flex;
  323. align-items: center;
  324. width: 100%;
  325. margin: 50px 0;
  326. border-bottom: 1px solid #E6E6E6;
  327. .serialNumber {
  328. width: 24px;
  329. height: 24px;
  330. color: #C5AA7B;
  331. border: 1px solid #C5AA7B;
  332. border-radius: 4px;
  333. margin-right: 10px;
  334. text-align: center;
  335. line-height: 24px;
  336. font-size: 12px;
  337. }
  338. .formName {
  339. font-size: 20px;
  340. font-weight: 400;
  341. color: #333333;
  342. width: 200px;
  343. }
  344. }
  345. .formBox {
  346. width: 100%;
  347. /deep/ .ruleForm {
  348. .el-form-item{
  349. padding: 0 170px;
  350. }
  351. }
  352. /deep/ .el-cascader {
  353. width: 100%;
  354. }
  355. .idDateBox {
  356. margin-bottom: 30px;
  357. /deep/.el-form-item__content{
  358. display: flex;
  359. }
  360. }
  361. .describe {
  362. margin: 15px 0 30px 0;
  363. p {
  364. // padding-left: 150px;
  365. font-size: 12px;
  366. color: #999999;
  367. }
  368. }
  369. .idImgesBox {
  370. display: flex;
  371. justify-content: space-between;
  372. .idImgaeLeft {
  373. width: 50%;
  374. }
  375. .idImgaeRight {
  376. width: 50%;
  377. text-align: right;
  378. }
  379. /deep/ .el-upload-list--picture-card {
  380. width: 284px;
  381. height: 180px;
  382. }
  383. /deep/ .el-upload--picture-card {
  384. width: 284px;
  385. height: 180px;
  386. position: relative;
  387. .avatar {
  388. width: 100%;
  389. max-height: 178px;
  390. }
  391. .noImg {
  392. position: absolute;
  393. left: 0;
  394. top: 0;
  395. bottom: 0;
  396. right: 0;
  397. background: #F7F7F7;
  398. .bgBox {
  399. height: 149px;
  400. align-items: center;
  401. display: flex;
  402. justify-content: center;
  403. }
  404. }
  405. .bgInfo {
  406. color: #FFFFFF;
  407. font-size: 14px;
  408. height: 39px;
  409. line-height: 39px;
  410. background: #A0C1FF;
  411. position: absolute;
  412. left: 0;
  413. bottom: 0;
  414. width: 100%;
  415. }
  416. .changeImg {
  417. display: none;
  418. position: absolute;
  419. top: 40px;
  420. left: 112px;
  421. width: 60px;
  422. height: 60px;
  423. line-height: 60px;
  424. background: #000000;
  425. opacity: 0.6;
  426. border-radius: 50%;
  427. color: #FFFFFF;
  428. }
  429. .zoomImg {
  430. position: absolute;
  431. top: 40px;
  432. left: 50px;
  433. width: 60px;
  434. height: 60px;
  435. line-height: 60px;
  436. background: #000000;
  437. opacity: 0.6;
  438. border-radius: 50%;
  439. color: #FFFFFF;
  440. }
  441. &:hover {
  442. .changeImg {
  443. display: block;
  444. }
  445. }
  446. }
  447. /deep/ .el-upload-list--picture-card .el-upload-list__item {
  448. width: 284px;
  449. height: 180px;
  450. }
  451. }
  452. .businessDate {
  453. span {
  454. display: inline-block;
  455. text-align: center;
  456. width: 50px;
  457. color: #666666;
  458. }
  459. .el-date-editor--date {
  460. width: 268px;
  461. }
  462. }
  463. .idType {
  464. /deep/ .el-select {
  465. width: 100%;
  466. }
  467. }
  468. }
  469. .submitBtn {
  470. display: block;
  471. width: 750px;
  472. height: 50px;
  473. margin: 40px auto 0 auto;
  474. color: #FFEBC4;
  475. background: #333333;
  476. box-shadow: 0px 20px 30px rgba(0, 0, 0, 0.2);
  477. }
  478. }
  479. }
  480. /deep/ .el-form-item__content {
  481. p {
  482. font-size: 12px;
  483. color: #999999;
  484. line-height: 20px;
  485. margin-top: 8px;
  486. }
  487. .el-input__inner,.el-textarea__inner{
  488. border-radius: 0;
  489. border: 1px solid transparent;
  490. color: #333;
  491. background: #F9F9F9;
  492. &:focus{
  493. border-color: #C5AA7B;
  494. }
  495. }
  496. }
  497. }
  498. .hide {
  499. /deep/ .el-upload--picture-card {
  500. display: none;
  501. }
  502. }
  503. .avatar-uploader {
  504. img {
  505. width: 100%;
  506. }
  507. }
  508. </style>