edit.blade.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407
  1. @extends('layouts.base')
  2. @section('title', "名片编辑")
  3. @section('content')
  4. <style>
  5. .rightlist #app .rightlist-head{padding:15px 0;line-height:50px;border-bottom:1px solid #ccc;}
  6. .rightlist #app{margin-left:30px;}
  7. .rightlist-head-con{float:left;padding-right:20px;font-size:16px;color:#888;}
  8. .el-form-item__label{padding-right:30px;}
  9. .mouse-active{cursor:pointer;border:1px dotted #409EFF;border-radius: 4px;}
  10. /* 滑块选择小白点 */
  11. .el-switch.is-checked .el-switch__core::after {left: 100%;margin-left: -17px;}
  12. .el-switch__core::after {content: "";position: absolute;top: 1px;left: 1px;border-radius: 100%;transition: all .3s;width: 16px;height: 16px;background-color: #fff;}
  13. .avatar-uploader .el-upload {margin-top:15px;border: 1px dashed #d9d9d9;border-radius: 6px;cursor: pointer;position: relative;overflow: hidden;}
  14. .avatar-uploader .el-upload:hover {border-color: #409EFF;}
  15. .avatar-uploader-icon {font-size: 28px;color: #8c939d;width: 178px;height: 178px;line-height: 178px;text-align: center;}
  16. .avatar {width: 178px;height: 178px;display: block;}
  17. .el-upload-tip{width:178px;margin:0;padding:0;color:#999;text-align:center;}
  18. input[type=file] {display: none;}
  19. .avatar-uploader-box{position:relative;width:200px;}
  20. .el-icon-circle-close{position:absolute;top:10px;right:0;color:#999;}
  21. .tip{font-size:12px;color:#999;}
  22. </style>
  23. <div class="rightlist">
  24. <div id="app" v-loading="submit_loading">
  25. <link rel="stylesheet" href="//at.alicdn.com/t/font_913727_zrmdutznqpd.css">
  26. <!-- <div class="rightlist-head">
  27. <div class="rightlist-head-con">名片管理</div>
  28. </div> -->
  29. <el-form ref="form" :model="form" :rules="rules" ref="form" label-width="15%">
  30. <el-breadcrumb separator-class="el-icon-arrow-right" style="padding:20px 0;font-size:16px;">
  31. <el-breadcrumb-item><a href="{{ yzWebFullUrl('plugin.business-card.admin.controllers.card.card-list') }}">名片管理</a></el-breadcrumb-item>
  32. <el-breadcrumb-item>编辑</el-breadcrumb-item>
  33. </el-breadcrumb>
  34. <el-form-item label="名片状态" prop="status">
  35. <el-radio v-model.number="form.status" :label="1">开启</el-radio>
  36. <el-radio v-model.number="form.status" :label="0">关闭</el-radio>
  37. <div class="tip">关闭后用户无法访问您的名片首页!</div>
  38. </el-form-item>
  39. <h5 class="rightlist-head">
  40. 基本信息
  41. </h5>
  42. <el-form-item label="头像" prop="card_avatar">
  43. <div class="avatar-uploader-box">
  44. <el-upload class="avatar-uploader" action="{{ yzWebFullUrl('plugin.business-card.admin.controllers.set.upload-local') }}" accept="image/*" :show-file-list="false" :on-success="uploadSuccess" :before-upload="beforeUpload">
  45. <img v-if="form.card_avatar" :src="form.card_avatar" class="avatar">
  46. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  47. <div slot="tip" class="el-upload-tip">(点击上框进行图片选择)</div>
  48. </el-upload>
  49. <a href="#" v-show="form.card_avatar" class="el-icon-circle-close" @click="clearImg" title="点击清除图片"></a>
  50. </div>
  51. </el-form-item>
  52. <el-form-item label="姓名" prop="card_name">
  53. <el-input v-model="form.card_name" style="width:70%"></el-input>
  54. </el-form-item>
  55. <el-form-item label="手机号" prop="card_mobile">
  56. <el-input v-model="form.card_mobile" style="width:70%"></el-input>
  57. </el-form-item>
  58. <el-form-item label="微信号" prop="card_wechat">
  59. <el-input v-model="form.card_wechat" style="width:70%"></el-input>
  60. </el-form-item>
  61. <el-form-item label="公司名称" prop="company">
  62. <el-input v-model="form.company" style="width:70%"></el-input>
  63. </el-form-item>
  64. <el-form-item label="角色选择" prop="role">
  65. <el-select v-model="form.role_id" placeholder="选择角色" style="width:30%">
  66. <el-option v-for="(item,index) in role_list" :key="index" :label="item.name" :value="item.id"></el-option>
  67. </el-select>
  68. </el-form-item>
  69. <el-form-item label="选择城市" prop="areas" v-loading="areaLoading">
  70. <el-select v-model="p.province" placeholder="请选择省" clearable @change="changeProvince" style="width:17.5%">
  71. <el-option v-for="item in province_list" :key="item.id" :label="item.areaname" :value="item.id"></el-option>
  72. </el-select>
  73. <el-select v-model="p.city" placeholder="请选择市" clearable @change="changeCity" style="width:17.5%">
  74. <el-option v-for="item in city_list" :key="item.id" :label="item.areaname" :value="item.id"></el-option>
  75. </el-select>
  76. <el-select v-model="p.district" placeholder="请选择区" clearable @change="changeDistrict" style="width:17.5%">
  77. <el-option v-for="item in district_list" :key="item.id" :label="item.areaname" :value="item.id"></el-option>
  78. </el-select>
  79. <el-select v-model="p.street" placeholder="请选择街道" clearable style="width:17.5%">
  80. <el-option v-for="item in street_list" :key="item.id" :label="item.areaname" :value="item.id"></el-option>
  81. </el-select>
  82. <!-- <el-cascader style="width: 70%" v-model="form.areas" v-loading="areaLoading" :options="areas" @active-item-change="loadAreas" :props="props"> -->
  83. </el-form-item>
  84. </el-cascader>
  85. <el-form-item label="详细地址" prop="address">
  86. <el-input v-model="form.address" placeholder="请输入详细地址" style="width:70%"></el-input>
  87. </el-form-item>
  88. <h5 class="rightlist-head">
  89. 名片设置
  90. </h5>
  91. <el-form-item label="我的简介" prop="introduction">
  92. <el-input v-model="form.introduction" style="width:70%" type="textarea" rows="5"></el-input>
  93. </el-form-item>
  94. {{--<el-form-item label="我的声音" prop="voice">--}}
  95. {{--<el-input v-model="form.voice" style="width:70%"></el-input>--}}
  96. {{--</el-form-item>--}}
  97. <el-form-item label="我的图片" prop="picture">
  98. <el-upload action="{{ yzWebFullUrl('plugin.business-card.admin.controllers.set.upload') }}" list-type="picture-card" :file-list="form.thumb_list" multiple :on-success="uploadBannerSuccess" :on-remove="clearImgList" :before-upload="beforeUpload">
  99. <i class="el-icon-plus"></i>
  100. </el-upload>
  101. </el-form-item>
  102. <el-form-item label="" prop="">
  103. <el-button @click="submit('form')">
  104. 保存
  105. </el-button>
  106. </el-form-item>
  107. </el-form>
  108. </div>
  109. </div>
  110. <script>
  111. var vm = new Vue({
  112. el:"#app",
  113. delimiters: ['[[', ']]'],
  114. data() {
  115. let role_list = JSON.parse('{!! $role_list !!}')
  116. let card_data = JSON.parse('{!! $cardData !!}')
  117. let id = {!! $id !!}
  118. console.log(card_data);
  119. console.log(role_list)
  120. var new_arr=[];
  121. for(var i in role_list) {
  122. new_arr.push({id:parseInt(i),name:role_list[i]})
  123. }
  124. return{
  125. loading:false,
  126. submit_loading:false,
  127. table_loading:false,
  128. areas: [],
  129. areaLoading: false,
  130. asset_list:[],
  131. form:{
  132. id:id,
  133. picture:[],
  134. thumb_list:[],
  135. ...card_data
  136. },
  137. p:{
  138. province:'',
  139. city:'',
  140. district:'',
  141. street:'',
  142. },
  143. rules:{},
  144. role_list:new_arr,
  145. level_list:[
  146. ],
  147. province_list:[],
  148. city_list:[],
  149. district_list:[],
  150. street_list:[],
  151. props: {
  152. label: 'areaname',
  153. value: 'id',
  154. children: 'children'
  155. },
  156. }
  157. },
  158. mounted: function () {
  159. this.initAreas();
  160. this.initProvince();
  161. this.changeProvince(this.form.areas[0]);
  162. this.changeCity(this.form.areas[1]);
  163. this.changeDistrict(this.form.areas[2]);
  164. this.p.province = this.form.areas[0];
  165. this.p.city = this.form.areas[1];
  166. this.p.district = this.form.areas[2];
  167. this.p.street = this.form.areas[3];
  168. },
  169. created(){
  170. var url_list = [];
  171. var thumb_list = [];
  172. if(this.form.picture==null) {
  173. this.form.picture = [];
  174. }
  175. for (var i=0;i<this.form.picture.length;i++){
  176. url_list.push({name : this.form.picture[i],url :this.form.picture[i]});
  177. }
  178. this.form.thumb_list = url_list;
  179. },
  180. methods: {
  181. uploadSuccess(res, file) {
  182. if (res.result == 1) {
  183. this.form.card_avatar = res.data.img_url;
  184. // this.form.card_avatar_url = res.data.img;
  185. this.$message.success("上传成功!");
  186. } else {
  187. this.$message.error(res.msg);
  188. }
  189. this.submit_loading = false;
  190. },
  191. clearImg() {
  192. console.log('clearaa');
  193. this.form.card_avatar = "";
  194. // this.form.card_avatar_url = "";
  195. },
  196. beforeUpload(file) {
  197. this.submit_loading = true;
  198. const isLt2M = file.size / 1024 / 1024 < 2;
  199. if (!isLt2M) {
  200. this.$message.error('上传图片大小不能超过 2MB!');
  201. this.submit_loading = false;
  202. }
  203. return isLt2M;
  204. },
  205. uploadBannerSuccess (res,file) {
  206. if (res.result == 1) {
  207. this.form.picture.push(res.data.img_url);
  208. // this.form.thumb_list.push({name:res.data.img_url,url:res.data.img_url});
  209. this.$message.success("上传成功!");
  210. } else {
  211. this.$message.error(res.msg);
  212. }
  213. this.submit_loading = false;
  214. },
  215. clearImgList(file, fileList) {
  216. this.form.picture = fileList;
  217. var new_url = [];
  218. for(var i=0;i<fileList.length;i++){
  219. new_url.push(fileList[i].name);
  220. }
  221. this.form.picture = new_url;
  222. },
  223. submit(formName) {
  224. console.log(this.form);
  225. this.$refs[formName].validate((valid) => {
  226. this.form.areas = [];
  227. this.form.areas.push(this.p.province,this.p.city,this.p.district,this.p.street);
  228. console.log(this.form);
  229. if (valid) {
  230. delete(this.form.card_avatar_url)
  231. this.submit_loading = true;
  232. this.$http.post("{!! yzWebFullUrl('plugin.business-card.admin.controllers.card.edit') !!}",{id:this.form.id,'form_data':this.form}).then(response => {
  233. if (response.data.result) {
  234. this.$message({type: 'success',message: '操作成功!'});
  235. // window.location.href='{!! yzWebFullUrl('plugin.business-card.admin.controllers.card.card-list') !!}';
  236. this.submit_loading = false;
  237. } else {
  238. this.$message({message: response.data.msg,type: 'error'});
  239. this.submit_loading = false;
  240. }
  241. },response => {
  242. this.submit_loading = false;
  243. });
  244. }
  245. else {
  246. console.log('error submit!!');
  247. return false;
  248. }
  249. });
  250. },
  251. initAreas(){
  252. this._initAreas('areas', 'areaLoading');
  253. },
  254. loadAreas(val) {
  255. this._loadAreas(val, 'areas', 'areaLoading');
  256. },
  257. _initAreas(areasName, areaLoadingName) {
  258. this[areaLoadingName] = true;
  259. return this.$http.get("{!! yzWebUrl('area.list.init', ['area_ids'=>'']) !!}"+this.form[areasName]).then(response => {
  260. this[areasName] = response.data.data;
  261. this[areaLoadingName] = false;
  262. }, response => {
  263. this[areaLoadingName] = false;
  264. });
  265. },
  266. _loadAreas(val, areasName, loadingName) {
  267. this[loadingName] = true;
  268. let leafAreas = this.findInAreas(this[areasName], val.values(),val);
  269. let url = "{!! yzWebUrl('area.list', ['parent_id'=> '']) !!}" + leafAreas.id;
  270. this.$http.get(url).then(response => {
  271. if (response.data.data.length) {
  272. leafAreas.children = response.data.data;
  273. } else {
  274. leafAreas.children = null;
  275. }
  276. this[loadingName] = false;
  277. }, response => {
  278. this[loadingName] = false;
  279. });
  280. },
  281. findInAreas(areas, areaIds,val) {
  282. // 找到当前选中地区option对应的model
  283. console.log(areas)
  284. let parentId = val[val.length-1];
  285. if(val.length==1){
  286. var result = areas.find(function (area) {
  287. return (area.id == parentId);
  288. });
  289. }
  290. if(val.length==2){
  291. for(var i=0;i<areas.length;i++){
  292. if(areas[i].id == val[0]){
  293. for(var j=0;j<areas[i].children.length;j++){
  294. if(areas[i].children[j].id==val[1]){
  295. result = areas[i].children[j];
  296. }
  297. }
  298. }
  299. }
  300. }
  301. if(val.length==3){
  302. for(var i=0;i<areas.length;i++){
  303. if(areas[i].id == val[0]){
  304. for(var j=0;j<areas[i].children.length;j++){
  305. if(areas[i].children[j].id==val[1]){
  306. for(var k=0;k<areas[i].children[j].children.length;k++){
  307. if(areas[i].children[j].children[k].id==val[2]){
  308. result = areas[i].children[j].children[k];
  309. }
  310. }
  311. }
  312. }
  313. }
  314. }
  315. }
  316. return result;
  317. },
  318. // 初始化省
  319. initProvince(val) {
  320. console.log(val);
  321. this.areaLoading = true;
  322. this.$http.get("{!! yzWebUrl('area.list.init', ['area_ids'=>'']) !!}"+val).then(response => {
  323. this.province_list = response.data.data;
  324. this.areaLoading = false;
  325. }, response => {
  326. this.areaLoading = false;
  327. });
  328. },
  329. // 省改变
  330. changeProvince(val) {
  331. this.city_list = [];
  332. this.district_list = [];
  333. this.street_list = [];
  334. this.p.city = "";
  335. this.p.district = "";
  336. this.p.street = "";
  337. this.areaLoading = true;
  338. let url = "{!! yzWebUrl('area.list', ['parent_id'=> '']) !!}" + val;
  339. this.$http.get(url).then(response => {
  340. if (response.data.data.length) {
  341. this.city_list = response.data.data;
  342. } else {
  343. this.city_list = null;
  344. }
  345. this.areaLoading = false;
  346. }, response => {
  347. this.areaLoading = false;
  348. });
  349. },
  350. // 市改变
  351. changeCity(val) {
  352. this.district_list = [];
  353. this.street_list = [];
  354. this.p.district = "";
  355. this.p.street = "";
  356. this.areaLoading = true;
  357. let url = "{!! yzWebUrl('area.list', ['parent_id'=> '']) !!}" + val;
  358. this.$http.get(url).then(response => {
  359. if (response.data.data.length) {
  360. this.district_list = response.data.data;
  361. } else {
  362. this.district_list = null;
  363. }
  364. this.areaLoading = false;
  365. }, response => {
  366. this.areaLoading = false;
  367. });
  368. },
  369. // 区改变
  370. changeDistrict(val) {
  371. console.log(val)
  372. this.street_list = [];
  373. this.p.street = "";
  374. this.areaLoading = true;
  375. let url = "{!! yzWebUrl('area.list', ['parent_id'=> '']) !!}" + val;
  376. this.$http.get(url).then(response => {
  377. if (response.data.data.length) {
  378. this.street_list = response.data.data;
  379. } else {
  380. this.street_list = null;
  381. }
  382. this.areaLoading = false;
  383. }, response => {
  384. this.areaLoading = false;
  385. });
  386. },
  387. },
  388. });
  389. </script>
  390. @endsection