update.blade.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  1. @extends('layouts.base')
  2. @section('title', trans('模块编辑'))
  3. @section('content')
  4. @include('public.admin.uploadMultimediaImg')
  5. @include('public.admin.tinymceee')
  6. <link rel="stylesheet" href="{{resource_get('plugins/pc-terminal-two/views/css/index.css')}}">
  7. <link rel="stylesheet" href="{{resource_get('plugins/pc-terminal-two/views/css/vue-img.css')}}">
  8. <script src="{{resource_get('static/yunshop/tinymce4.7.5/tinymce.min.js')}}"></script>
  9. <div class="all">
  10. <div id="app" v-cloak>
  11. <el-form ref="form" :model="form" :rules="rules" label-width="15%">
  12. <div class="vue-main" style="min-height: 500px;">
  13. <div class="vue-main-title">
  14. <div class="vue-main-title-left"></div>
  15. <div class="vue-main-title-content">模块编辑</div>
  16. <el-button type="primary" class="createModule" @click="returnModule">返回列表</el-button>
  17. </div>
  18. <div class="vue-main-form">
  19. <el-form-item label="排序" prop="">
  20. <el-input type="age" maxlength="15" v-model.number="form.sort" clearable
  21. style="width:30%"></el-input>
  22. </el-form-item>
  23. <el-form-item label="状态">
  24. <el-switch v-model="form.status" :active-value="1" :inactive-value="0"></el-switch>
  25. </el-form-item>
  26. <el-form-item label="标题" prop="title">
  27. <el-input v-model="form.title" clearable style="width:50%"></el-input>
  28. </el-form-item>
  29. <el-form-item label="副标题" prop="subtitle">
  30. <el-input v-model="form.subtitle" clearable style="width:50%"></el-input>
  31. </el-form-item>
  32. <el-form-item label="跳转分类链接" prop="category_link">
  33. <el-input v-model="form.category_link" clearable style="width:50%"></el-input>
  34. </el-form-item>
  35. <el-form-item label="选择供应商">
  36. <el-button @click="querySupplier">点击选择供应商</el-button>
  37. <el-dialog title="供应商" center :visible.sync="dialogFormVisible">
  38. <template>
  39. <el-form :inline="true" :model="searchForm" class="demo-form-inline">
  40. <el-form-item label="">
  41. <el-input v-model="searchForm.member_key" placeholder="id/手机号码/昵称/姓名"></el-input>
  42. </el-form-item>
  43. <el-form-item label="">
  44. <el-input v-model="searchForm.supplier_username" placeholder="供应商用户名"></el-input>
  45. </el-form-item>
  46. <el-form-item label="">
  47. <el-button type="primary" @click="getSupplier">搜索</el-button>
  48. </el-form-item>
  49. </el-form>
  50. <el-table :data="supplier.data">
  51. <el-table-column prop="" label="会员ID">
  52. <template slot-scope="scope">
  53. <div v-if="scope.row.has_one_member">[[scope.row.has_one_member.uid]]</div>
  54. </template>
  55. </el-table-column>
  56. <el-table-column prop="" label="会员信息">
  57. <template slot-scope="scope">
  58. <div>
  59. <div v-if="scope.row.has_one_member"><img :src="scope.row.has_one_member.avatar_image" alt="" style="width:40px;height:40px;border-radius:50%"></div>
  60. <div style="line-height:32px;color:#29BA9C;cursor: pointer;" class="vue-ellipsis" v-if="scope.row.has_one_member">[[scope.row.has_one_member.nickname]]</div>
  61. </div>
  62. </template>
  63. </el-table-column>
  64. <el-table-column prop="" label="供应商ID">
  65. <template slot-scope="scope">
  66. <div>[[scope.row.id]]</div>
  67. </template>
  68. </el-table-column>
  69. <el-table-column prop="" label="供应商用户名">
  70. <template slot-scope="scope">
  71. <div>[[scope.row.username]]</div>
  72. </template>
  73. </el-table-column>
  74. <el-table-column label="操作">
  75. <template slot-scope="scope">
  76. <el-button @click="selectSupplier(scope.row)">选择</el-button>
  77. </template>
  78. </el-table-column>
  79. </el-table>
  80. <el-row>
  81. <el-col align="right">
  82. <el-pagination layout="prev, pager, next"
  83. @current-change="searchStorePage"
  84. :total="supplier.total"
  85. :page-size="supplier.per_page"
  86. :current-page="supplier.current_page"
  87. background
  88. ></el-pagination>
  89. </el-col>
  90. </el-row>
  91. </template>
  92. <div slot="footer" class="dialog-footer">
  93. <el-button type="primary" @click="dialogFormVisible = false">关闭</el-button>
  94. </div>
  95. </el-dialog>
  96. <div class="demo-image storeInfo">
  97. <div class="block storeInfoL" v-for="supplier in form.select_supplier" :key="supplier.id">
  98. <el-button @click="selectSupplier(scope.row)">
  99. <i class="el-icon-circle-close iconSet" @click="delStore(supplier.id)"></i>
  100. <div style="text-align: justify;">供应商ID: [[ supplier.id ]]</div>
  101. <div style="text-align: justify;width:200px;overflow:hidden;white-space: nowrap;text-overflow: ellipsis;-o-text-overflow:ellipsis;
  102. ">供应商用户名: [[ supplier.username ]]</div>
  103. </el-button>
  104. </div>
  105. </div>
  106. </el-form-item>
  107. <el-form-item label="供应商自动切换时间" prop="">
  108. <el-input type="age" maxlength="15" v-model.number="form.switch_second" clearable
  109. style="width:30%"><template slot="append">秒</template></el-input>
  110. <p style="color:#d6d6d6;">为0为空不切换</p>
  111. </el-form-item>
  112. <el-form-item label="左侧轮播图一">
  113. <div class="upload-box" @click="openUpload('carousel_first_img',1,'one')" v-if="!form.carousel_first_img_url" style="width:150px;height:250px;">
  114. <i class="el-icon-plus" style="font-size:32px;"></i>
  115. </div>
  116. <div @click="openUpload('carousel_first_img',1,'one')" class="upload-boxed" v-if="form.carousel_first_img_url" style="width:150px;height:250px;">
  117. <img :src="form.carousel_first_img_url" alt=""
  118. style="width:150px;height:250px;border-radius: 5px;cursor: pointer;">
  119. <div class="upload-boxed-text">点击重新上传</div>
  120. <i class="el-icon-close" @click.stop="clearImg('carousel_first_img')" title="点击清除图片"></i>
  121. </div>
  122. <span style="margin-left: 20px;color:#d6d6d6;position: absolute;top: 220px;">建议尺寸: 268 * 610</span>
  123. </el-form-item>
  124. <el-form-item label="左侧轮播图一跳转链接" prop="carousel_first_link">
  125. <el-input v-model="form.carousel_first_link" clearable style="width:50%" ></el-input>
  126. </el-form-item>
  127. <el-form-item label="左侧轮播图二">
  128. <div class="upload-box" @click="openUpload('carousel_second_img',1,'one')" v-if="!form.carousel_second_img_url" style="width:150px;height:250px;">
  129. <i class="el-icon-plus" style="font-size:32px;"></i>
  130. </div>
  131. <div @click="openUpload('carousel_second_img',1,'one')" class="upload-boxed" v-if="form.carousel_second_img_url" style="width:150px;height:250px;">
  132. <img :src="form.carousel_second_img_url" alt=""
  133. style="width:150px;height:250px;border-radius: 5px;cursor: pointer;">
  134. <div class="upload-boxed-text">点击重新上传</div>
  135. <i class="el-icon-close" @click.stop="clearImg('carousel_second_img')" title="点击清除图片"></i>
  136. </div>
  137. <span style="margin-left: 20px;color:#d6d6d6;position: absolute;top: 220px;">建议尺寸: 268 * 610</span>
  138. </el-form-item>
  139. <el-form-item label="左侧轮播图二跳转链接" prop="carousel_second_link">
  140. <el-input v-model="form.carousel_second_link" clearable style="width:50%" ></el-input>
  141. </el-form-item>
  142. <el-form-item label="左侧轮播图三">
  143. <div class="upload-box" @click="openUpload('carousel_third_img',1,'one')" v-if="!form.carousel_third_img_url" style="width:150px;height:250px;">
  144. <i class="el-icon-plus" style="font-size:32px;"></i>
  145. </div>
  146. <div @click="openUpload('carousel_third_img',1,'one')" class="upload-boxed" v-if="form.carousel_third_img_url" style="width:150px;height:250px;">
  147. <img :src="form.carousel_third_img_url" alt=""
  148. style="width:150px;height:250px;border-radius: 5px;cursor: pointer;">
  149. <div class="upload-boxed-text">点击重新上传</div>
  150. <i class="el-icon-close" @click.stop="clearImg('carousel_third_img')" title="点击清除图片"></i>
  151. </div>
  152. <span style="margin-left: 20px;color:#d6d6d6;position: absolute;top: 220px;">建议尺寸: 268 * 610</span>
  153. </el-form-item>
  154. <el-form-item label="左侧轮播图三跳转链接" prop="carousel_third_link">
  155. <el-input v-model="form.carousel_third_link" clearable style="width:50%" ></el-input>
  156. </el-form-item>
  157. </div>
  158. </div>
  159. <div class="vue-page">
  160. <div class="vue-center">
  161. <el-button type="primary" @click="submitForm">提交</el-button>
  162. </div>
  163. </div>
  164. </el-form>
  165. <upload-multimedia-img :upload-show="uploadShow" :type="typeStatus" :name="chooseImgName" :sel-Num="selNum"
  166. @replace="changeProp" @sure="sureImg"></upload-multimedia-img>
  167. </div>
  168. </div>
  169. <script>
  170. let supplier_open = ({!! app('plugins')->isEnabled('supplier') ? 1 : 0 !!})
  171. let module = JSON.parse(`{!! $module !!}`)
  172. console.log(module)
  173. let app = new Vue({
  174. el: "#app",
  175. delimiters: ['[[', ']]'],
  176. data() {
  177. return {
  178. form: {
  179. id: module.id,
  180. sort: module.sort,
  181. title: module.title,
  182. subtitle: module.subtitle,
  183. status: module.status,
  184. category_link: module.category_link,
  185. switch_second: module.switch_second,
  186. carousel_first_img: module.carousel_first_img,
  187. carousel_first_img_url: module.carousel_first_img_url,
  188. carousel_first_link: module.carousel_first_link,
  189. carousel_second_img: module.carousel_second_img,
  190. carousel_second_img_url: module.carousel_second_img_url,
  191. carousel_second_link: module.carousel_second_link,
  192. carousel_third_img: module.carousel_third_img,
  193. carousel_third_img_url: module.carousel_third_img_url,
  194. carousel_third_link: module.carousel_third_link,
  195. select_supplier: module.select_supplier
  196. },
  197. uploadShow: false,
  198. typeStatus: '',
  199. selNum: '',
  200. chooseImgName: '',
  201. submit_url: '',
  202. showVisible: false,
  203. repeated_submit: false,
  204. rules: {
  205. title: [
  206. {required: true, message: '请输入标题', trigger: 'blur'},
  207. ],
  208. subtitle: [
  209. {required: true, message: '请输入副标题', trigger: 'blur'},
  210. ],
  211. category_link: [
  212. {required: true, message: '请输入分类跳转链接', trigger: 'blur'},
  213. ],
  214. },
  215. searchForm: {
  216. member_key: ''
  217. },
  218. dialogFormVisible: false,
  219. supplier: [],
  220. storesPage: 1,
  221. supplier_open: supplier_open
  222. }
  223. },
  224. methods: {
  225. // 返回营销码列表
  226. returnModule() {
  227. history.back()
  228. },
  229. // 提交订单生成二维码
  230. submitForm() {
  231. if (this.srepeated_submit) return false
  232. let formData = new FormData();
  233. formData.append('id', this.form.id)
  234. formData.append('sort', this.form.sort)
  235. formData.append('title', this.form.title)
  236. formData.append('subtitle', this.form.subtitle)
  237. formData.append('status', this.form.status)
  238. formData.append('category_link', this.form.category_link)
  239. formData.append('switch_second', this.form.switch_second)
  240. formData.append('carousel_first_img', this.form.carousel_first_img)
  241. formData.append('carousel_first_link', this.form.carousel_first_link)
  242. formData.append('carousel_second_img', this.form.carousel_second_img)
  243. formData.append('carousel_second_link', this.form.carousel_second_link)
  244. formData.append('carousel_third_img', this.form.carousel_third_img)
  245. formData.append('carousel_third_link', this.form.carousel_third_link)
  246. formData.append('select_supplier', JSON.stringify(this.form.select_supplier))
  247. this.$refs['form'].validate((valid) => {
  248. if (valid) {
  249. this.srepeated_submit = true
  250. this.$http.post(`{!! yzWebFullUrl('plugin.pc-terminal-two.backend.supplier-module.update') !!}`, formData).then(function (response) {
  251. if (response.data.result) {
  252. this.$message({
  253. message: response.data.msg,
  254. type: 'success'
  255. });
  256. setTimeout(function () {
  257. window.location.href = `{!! yzWebUrl('plugin.pc-terminal-two.backend.supplier-module.index') !!}`
  258. }, 200);
  259. } else {
  260. this.$message({
  261. message: response.data.msg,
  262. type: 'error'
  263. });
  264. }
  265. }, function (response) {
  266. this.$message({
  267. message: response.data.msg,
  268. type: 'error'
  269. });
  270. });
  271. } else {
  272. this.srepeated_submit = false
  273. this.$message({
  274. message: '请检查输入参数',
  275. type: 'error'
  276. });
  277. return false;
  278. }
  279. })
  280. },
  281. changeColor(color) {
  282. this.form.color = color
  283. },
  284. clearImg(img) {
  285. this.form[img] = '';
  286. this.form[img + '_url'] = '';
  287. this.$forceUpdate();
  288. },
  289. openUpload(str, type, sel) {
  290. this.chooseImgName = str;
  291. this.uploadShow = true;
  292. this.typeStatus = String(type)
  293. this.selNum = sel
  294. },
  295. sureImg(name, uploadShow, fileList) {
  296. if (fileList.length <= 0) {
  297. return
  298. }
  299. this.form[name] = fileList[0].attachment
  300. this.form[name + '_url'] = fileList[0].url
  301. },
  302. changeProp(val) {
  303. if (val == true) {
  304. this.uploadShow = false;
  305. } else {
  306. this.uploadShow = true;
  307. }
  308. },
  309. getSupplier() {
  310. let params = {
  311. search: this.searchForm,
  312. page: this.storesPage
  313. }
  314. this.$http.post(`{!! yzWebFullUrl('plugin.pc-terminal-two.backend.supplier-module.search-supplier') !!}`, params).then(function (response) {
  315. if (response.data.result) {
  316. this.supplier = response.data.data
  317. }
  318. });
  319. },
  320. selectSupplier(supplier)
  321. {
  322. let selected = {
  323. id: supplier.id,
  324. username: supplier.username,
  325. }
  326. let found = this.form.select_supplier.find(item => { return item.id === selected.id })
  327. if (!found) {
  328. this.form.select_supplier.push(selected)
  329. }
  330. },
  331. querySupplier() {
  332. if (!this.supplier_open) {
  333. this.$message({
  334. message: '请开启供应商插件',
  335. type: 'error'
  336. });
  337. return;
  338. }
  339. this.dialogFormVisible = true
  340. this.getSupplier()
  341. },
  342. searchStorePage(page) {
  343. this.storesPage = page
  344. this.getSupplier()
  345. },
  346. delStore(store_id) {
  347. this.form.select_supplier.splice(this.form.select_supplier.findIndex(e => e.id === store_id), 1)
  348. }
  349. }
  350. })
  351. </script>
  352. <style>
  353. .createModule {
  354. background-color: #e5f6f1;
  355. color: #48c1a7;
  356. }
  357. .storeInfo {
  358. display: flex;
  359. flex-wrap: wrap;
  360. }
  361. .storeInfoL {
  362. margin-right: 10px;
  363. margin-top: 10px;
  364. display: flex;
  365. flex-direction: column;
  366. position: relative;
  367. background: white;
  368. }
  369. .iconSet {
  370. position: absolute;
  371. right: 2px;
  372. top: 1px;
  373. z-index: 1;
  374. }
  375. </style>
  376. @endsection