detail.blade.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  1. @extends('layouts.base')
  2. @section('title', '分时预约')
  3. @section('content')
  4. <link rel="stylesheet" href="{{resource_get('plugins/reserve-simple/src/static/index.css')}}">
  5. <style>
  6. .el-tag {
  7. margin-right: 10px;
  8. }
  9. </style>
  10. <div class="all">
  11. <div id="app" v-cloak>
  12. <div class="vue-crumbs">
  13. <a @click="goBack()">{{$lang_set['reserve_obj']}}管理</a> > 编辑{{$lang_set['reserve_obj']}}
  14. </div>
  15. <el-form ref="form" :model="form" :rules="rules" label-width="15%">
  16. <div class="vue-main">
  17. <div class="vue-main-title">
  18. <div class="vue-main-title-left"></div>
  19. <div class="vue-main-title-content">编辑{{$lang_set['reserve_obj']}}</div>
  20. </div>
  21. <div class="vue-main-form">
  22. <el-form-item label="关联会员" prop="uid">
  23. <div class="upload-box" @click="openMember()" v-if="!form.uid">
  24. <div class="upload-box-member">
  25. <i class="el-icon-plus" style="font-size:32px"></i><br>
  26. 选 择
  27. </div>
  28. </div>
  29. <div class="upload-boxed" v-if="form.uid">
  30. <img @click="openMember()" :src="choosed_member.avatar" alt="" style="width:150px;height:150px;border-radius: 5px;cursor: pointer;" />
  31. <div class="upload-boxed-text">重新选择</div>
  32. <div class="upload-boxed-text-clear" @click="clearMember('uid')">清除选择</div>
  33. <div style="text-align:center;line-height: 20px;">【id:[[choosed_member.uid]]】[[choosed_member.nickname]]</div>
  34. </div>
  35. </el-form-item>
  36. <el-form-item label="名称" prop="name">
  37. <el-input v-model="form.name" style="width:70%;"></el-input>
  38. </el-form-item>
  39. <el-form-item label="关联{{$lang_set['service']}}" prop="">
  40. <div class="upload-boxed-list">
  41. <el-tag
  42. :key="index"
  43. v-for="(value,key,index) in obj_service_list"
  44. closable
  45. :disable-transitions="true"
  46. @close="clearService(index,key)">
  47. 【id:[[value.id]]】[[value.title]]
  48. </el-tag>
  49. <el-button type="primary" icon="el-icon-plus" size="small" @click="openService()">添加</el-button>
  50. </div>
  51. </el-form-item>
  52. <el-form-item label="头像" prop="thumb">
  53. <div class="upload-box" @click="openUpload('thumb')" v-if="!form.thumb">
  54. <i class="el-icon-plus" style="font-size:32px"></i>
  55. </div>
  56. <div @click="openUpload('thumb')" class="upload-boxed" v-if="form.thumb">
  57. <img :src="form.thumb" alt="" style="width:150px;height:150px;border-radius: 5px;cursor: pointer;">
  58. <div class="upload-boxed-text">点击重新上传</div>
  59. </div>
  60. <div class="tip">提示: 100*100px或正方型图片</div>
  61. </el-form-item>
  62. <el-form-item label="简介" prop="description">
  63. <el-input v-model="form.description" type="textarea" style="width:70%;"></el-input>
  64. </el-form-item>
  65. <el-form-item label="描述" prop="content">
  66. <tinymceee v-model="form.content"></tinymceee>
  67. </el-form-item>
  68. </div>
  69. </div>
  70. </el-form>
  71. <!-- 选择会员 -->
  72. <el-dialog title="选择会员" :visible.sync="member_show" width="60%">
  73. <div>
  74. <el-input v-model="member_keyword" style="width:60%;" placeholder="会员手机号码"></el-input>
  75. <el-button @click="getMember" >搜索</el-button>
  76. </div>
  77. <el-table :data="member_list" style="width: 100%;height:500px;overflow:auto" v-loading="loading">
  78. <el-table-column label="ID" prop="uid" align="center" width="100px"></el-table-column>
  79. <el-table-column label="会员信息">
  80. <template slot-scope="scope">
  81. <div style="display:flex;align-items: center;">
  82. <div v-if="scope.row.avatar_image" style="width:40px;">
  83. <el-image :src="scope.row.avatar_image" alt="" style="width:40px;height:40px;border-radius:50%"></el-image>
  84. </div>
  85. <div style="flex:1;">[[scope.row.nickname]]</div>
  86. </div>
  87. </template>
  88. </el-table-column>
  89. <el-table-column prop="refund_time" label="操作" align="center" width="320">
  90. <template slot-scope="scope">
  91. <el-button @click="chooseMember(scope.row)">
  92. 选择
  93. </el-button>
  94. </template>
  95. </el-table-column>
  96. </el-table>
  97. <span slot="footer" class="dialog-footer">
  98. <el-button @click="member_show = false">取 消</el-button>
  99. </span>
  100. </el-dialog>
  101. <!-- 选择服务 -->
  102. <el-dialog title="选择{{$lang_set['service']}}" :visible.sync="service_show" width="60%">
  103. <div>
  104. <el-input v-model="service_keyword" style="width:60%;" placeholder="{{$lang_set['service']}}信息"></el-input>
  105. <el-button @click="getService" >搜索</el-button>
  106. </div>
  107. <el-table :data="service_list" style="width: 100%;height:500px;overflow:auto" v-loading="loading">
  108. <el-table-column label="ID" prop="id" align="center" width="100px"></el-table-column>
  109. <el-table-column label="{{$lang_set['service']}}信息">
  110. <template slot-scope="scope">
  111. <div style="display:flex;align-items: center;">
  112. <div style="flex:1;">[[scope.row.title]]</div>
  113. </div>
  114. </template>
  115. </el-table-column>
  116. <el-table-column prop="refund_time" label="操作" align="center" width="320">
  117. <template slot-scope="scope">
  118. <el-button @click="chooseService(scope.row)">
  119. 选择
  120. </el-button>
  121. </template>
  122. </el-table-column>
  123. </el-table>
  124. <span slot="footer" class="dialog-footer">
  125. {{--<el-button @click="closeStore">取 消</el-button>--}}
  126. </span>
  127. </el-dialog>
  128. <div class="vue-page">
  129. <div class="vue-center">
  130. <el-button type="primary" @click="submitForm('form')">提交</el-button>
  131. <el-button @click="goBack">返回</el-button>
  132. </div>
  133. </div>
  134. <upload-img :upload-show="uploadShow" :name="chooseImgName" @replace="changeProp" @sure="sureImg"></upload-img>
  135. </div>
  136. </div>
  137. <script src="{{resource_get('static/yunshop/tinymce4.7.5/tinymce.min.js')}}"></script>
  138. @include('public.admin.uploadImg')
  139. @include('public.admin.tinymceee')
  140. <script>
  141. var app = new Vue({
  142. el:"#app",
  143. delimiters: ['[[', ']]'],
  144. name: 'test',
  145. data() {
  146. return{
  147. id:0,
  148. form:{
  149. uid:'',
  150. name:'',
  151. service_ids:'',
  152. thumb:'',
  153. description:'',
  154. content:''
  155. },
  156. submit_url:'',
  157. is_edit:false,
  158. // 会员
  159. member_keyword:'',
  160. member_show:false,
  161. member_list:[],
  162. choosed_member:{},
  163. chooseImgName:'',
  164. uploadShow:false,
  165. loading: false,
  166. obj_service_list:{},
  167. service_keyword:'',
  168. service_show:false,
  169. service_list:[],
  170. rules:{
  171. uid:{ required: true, message: '请关联会员'},
  172. name:{ required: true, message: '请输入名称'}
  173. },
  174. }
  175. },
  176. created() {
  177. },
  178. mounted() {
  179. this.id = this.getParam("id");
  180. if(this.id) {
  181. this.is_edit = true;
  182. this.submit_url = `{!! yzWebFullUrl('plugin.reserve-simple.admin.obj.update') !!}`;
  183. this.getData();
  184. }
  185. else {
  186. this.submit_url = `{!! yzWebFullUrl('plugin.reserve-simple.admin.obj.create') !!}`;
  187. }
  188. },
  189. methods: {
  190. getParam(name) {
  191. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  192. var r = window.location.search.substr(1).match(reg);
  193. if (r != null) return unescape(r[2]);
  194. return null;
  195. },
  196. getData() {
  197. let loading = this.$loading({target:document.querySelector(".content"),background: 'rgba(0, 0, 0, 0)'});
  198. this.$http.post('{!! yzWebFullUrl('plugin.reserve-simple.admin.obj.getDetail') !!}',{id:this.id}).then(function (response) {
  199. if (response.data.result && response.data.data){
  200. this.form = {
  201. ...response.data.data.obj_info,
  202. };
  203. if(response.data.data.obj_info){
  204. this.choosed_member = response.data.data.obj_info.has_one_member;
  205. }
  206. if(response.data.data.obj_services && !(response.data.data.obj_services instanceof Array)){
  207. this.obj_service_list = response.data.data.obj_services;
  208. }
  209. }
  210. else {
  211. this.$message({message: response.data.msg,type: 'error'});
  212. }
  213. loading.close();
  214. },function (response) {
  215. this.$message({message: response.data.msg,type: 'error'});
  216. loading.close();
  217. }
  218. );
  219. },
  220. submitForm(formName) {
  221. let json = {
  222. uid:this.form.uid,
  223. name:this.form.name,
  224. thumb:this.form.thumb,
  225. description:this.form.description,
  226. content:this.form.content
  227. };
  228. if(this.id) {
  229. json.id = this.id
  230. }
  231. let service_ids = '';
  232. for(let i in this.obj_service_list) {
  233. service_ids += this.obj_service_list[i].id + ',';
  234. }
  235. if (service_ids) {
  236. service_ids = service_ids.substring(0,service_ids.length-1);
  237. }
  238. json['service_ids'] = service_ids;
  239. this.$refs[formName].validate((valid) => {
  240. if (valid) {
  241. let loading = this.$loading({target:document.querySelector(".content"),background: 'rgba(0, 0, 0, 0)'});
  242. this.$http.post(this.submit_url,{obj:json}).then(response => {
  243. if (response.data.result) {
  244. this.$message({type: 'success',message: '操作成功!'});
  245. this.goBack();
  246. } else {
  247. this.$message({message: response.data.msg,type: 'error'});
  248. }
  249. loading.close();
  250. },response => {
  251. loading.close();
  252. });
  253. }
  254. else {
  255. console.log('error submit!!');
  256. return false;
  257. }
  258. });
  259. },
  260. goBack() {
  261. history.go(-1)
  262. },
  263. openMember() {
  264. this.member_show = true;
  265. },
  266. getMember(){
  267. this.$http.post("{!! yzWebFullUrl('plugin.reserve-simple.admin.member.query') !!}",{keyword:this.member_keyword}).then(response => {
  268. if (response.data.result) {
  269. this.member_list=response.data.data
  270. }else{
  271. this.$message({type: 'error',message: response.data.msg});
  272. }
  273. }, response => {
  274. this.$message({type: 'error',message: response.data.msg});
  275. console.log(response);
  276. });
  277. },
  278. chooseMember(row) {
  279. this.choosed_member = row;
  280. this.form['uid'] = row.uid
  281. this.member_show = false;
  282. console.log(this.choosed_member)
  283. },
  284. clearMember() {
  285. this.choosed_member = {};
  286. this.form['uid'] = "";
  287. this.$forceUpdate();
  288. },
  289. openUpload(str) {
  290. this.chooseImgName = str;
  291. this.uploadShow = true;
  292. },
  293. changeProp(val) {
  294. if(val == true) {
  295. this.uploadShow = false;
  296. }
  297. else {
  298. this.uploadShow = true;
  299. }
  300. },
  301. sureImg(name,image,image_url) {
  302. this.form[name] = image_url;
  303. },
  304. clearImg(str) {
  305. this.form[str] = "";
  306. this.$forceUpdate();
  307. },
  308. openService() {
  309. this.service_show = true;
  310. },
  311. closeService(){
  312. console.log('closeService');
  313. this.service_show = false;
  314. },
  315. getService(){
  316. this.$http.post("{!! yzWebUrl('plugin.reserve-simple.admin.service.query') !!}",{keyword:this.service_keyword}).then(response => {
  317. if (response.data.result && response.data.data) {
  318. this.service_list=response.data.data.list
  319. }else{
  320. this.$message({type: 'error',message: response.data.msg});
  321. }
  322. }, response => {
  323. this.$message({type: 'error',message: response.data.msg});
  324. console.log(response);
  325. });
  326. },
  327. chooseService(row) {
  328. let that = this;
  329. for(let i in this.obj_service_list) {
  330. if(row.id == i) {
  331. this.$message.error("该{{$lang_set['service']}}已选择,请勿重复选择!");
  332. return;
  333. }
  334. }
  335. that.obj_service_list[row.id] = row;
  336. console.log(this.obj_service_list)
  337. },
  338. clearService(index,key) {
  339. console.log(index,key);
  340. delete(this.obj_service_list[key]);
  341. console.log(this.obj_service_list);
  342. this.$forceUpdate();
  343. },
  344. },
  345. })
  346. </script>
  347. @endsection