generate.blade.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  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. <i class="el-icon-circle-close iconSet" @click="delStore(supplier.id)"></i>
  99. <el-image
  100. style="width: 150px; height: 150px"
  101. :src="supplier.thumb"
  102. fit="cover"></el-image>
  103. <span style=""> 供应商ID: [[ supplier.id ]]</span>
  104. <span style="margin-top: -20px;"> 供应商模块: [[ supplier.username ]]</span>
  105. </div>
  106. </div>
  107. </el-form-item>
  108. <el-form-item label="供应商自动切换时间" prop="">
  109. <el-input type="age" maxlength="15" v-model.number="form.switch_second" clearable
  110. style="width:30%"><template slot="append">秒</template></el-input>
  111. <p style="color:#d6d6d6;">为0为空不切换</p>
  112. </el-form-item>
  113. <el-form-item label="左侧轮播图一">
  114. <div class="upload-box" @click="openUpload('carousel_first_img',1,'one')" v-if="!form.carousel_first_img_url" style="width:150px;height:250px;">
  115. <i class="el-icon-plus" style="font-size:32px;"></i>
  116. </div>
  117. <div @click="openUpload('carousel_first_img',1,'one')" class="upload-boxed" v-if="form.carousel_first_img_url" style="width:150px;height:250px;">
  118. <img :src="form.carousel_first_img_url" alt=""
  119. style="width:150px;height:250px;border-radius: 5px;cursor: pointer;">
  120. <div class="upload-boxed-text">点击重新上传</div>
  121. <i class="el-icon-close" @click.stop="clearImg('carousel_first_img')" title="点击清除图片"></i>
  122. </div>
  123. <span style="margin-left: 20px;color:#d6d6d6;position: absolute;top: 220px;">建议尺寸: 268 * 610</span>
  124. </el-form-item>
  125. <el-form-item label="左侧轮播图一跳转链接" prop="carousel_first_link">
  126. <el-input v-model="form.carousel_first_link" clearable style="width:50%" ></el-input>
  127. </el-form-item>
  128. <el-form-item label="左侧轮播图二">
  129. <div class="upload-box" @click="openUpload('carousel_second_img',1,'one')" v-if="!form.carousel_second_img_url" style="width:150px;height:250px;">
  130. <i class="el-icon-plus" style="font-size:32px;"></i>
  131. </div>
  132. <div @click="openUpload('carousel_second_img',1,'one')" class="upload-boxed" v-if="form.carousel_second_img_url" style="width:150px;height:250px;">
  133. <img :src="form.carousel_second_img_url" alt=""
  134. style="width:150px;height:250px;border-radius: 5px;cursor: pointer;">
  135. <div class="upload-boxed-text">点击重新上传</div>
  136. <i class="el-icon-close" @click.stop="clearImg('carousel_second_img')" title="点击清除图片"></i>
  137. </div>
  138. <span style="margin-left: 20px;color:#d6d6d6;position: absolute;top: 220px;">建议尺寸: 268 * 610</span>
  139. </el-form-item>
  140. <el-form-item label="左侧轮播图二跳转链接" prop="carousel_second_link">
  141. <el-input v-model="form.carousel_second_link" clearable style="width:50%" ></el-input>
  142. </el-form-item>
  143. <el-form-item label="左侧轮播图三">
  144. <div class="upload-box" @click="openUpload('carousel_third_img',1,'one')" v-if="!form.carousel_third_img_url" style="width:150px;height:250px;">
  145. <i class="el-icon-plus" style="font-size:32px;"></i>
  146. </div>
  147. <div @click="openUpload('carousel_third_img',1,'one')" class="upload-boxed" v-if="form.carousel_third_img_url" style="width:150px;height:250px;">
  148. <img :src="form.carousel_third_img_url" alt=""
  149. style="width:150px;height:250px;border-radius: 5px;cursor: pointer;">
  150. <div class="upload-boxed-text">点击重新上传</div>
  151. <i class="el-icon-close" @click.stop="clearImg('carousel_third_img')" title="点击清除图片"></i>
  152. </div>
  153. <span style="margin-left: 20px;color:#d6d6d6;position: absolute;top: 220px;">建议尺寸: 268 * 610</span>
  154. </el-form-item>
  155. <el-form-item label="左侧轮播图三跳转链接" prop="carousel_third_link">
  156. <el-input v-model="form.carousel_third_link" clearable style="width:50%" ></el-input>
  157. </el-form-item>
  158. </div>
  159. </div>
  160. <div class="vue-page">
  161. <div class="vue-center">
  162. <el-button type="primary" @click="submitForm">提交</el-button>
  163. </div>
  164. </div>
  165. </el-form>
  166. <upload-multimedia-img :upload-show="uploadShow" :type="typeStatus" :name="chooseImgName" :sel-Num="selNum"
  167. @replace="changeProp" @sure="sureImg"></upload-multimedia-img>
  168. </div>
  169. </div>
  170. <script>
  171. let supplier_open = ({!! app('plugins')->isEnabled('supplier') ? 1 : 0 !!})
  172. let app = new Vue({
  173. el: "#app",
  174. delimiters: ['[[', ']]'],
  175. data() {
  176. return {
  177. form: {
  178. sort: 0,
  179. title: '',
  180. subtitle: '',
  181. status: 0,
  182. category_link: '',
  183. switch_second: 0,
  184. carousel_first_img: '',
  185. carousel_first_link: '',
  186. carousel_second_img: '',
  187. carousel_second_link: '',
  188. carousel_third_img: '',
  189. carousel_third_link: '',
  190. select_supplier: []
  191. },
  192. supplier_open: supplier_open,
  193. repeated_submit: false,
  194. clear_img: false,
  195. srepeated_submit: false,
  196. rules: {
  197. title: [
  198. {required: true, message: '请输入标题', trigger: 'blur'},
  199. ],
  200. subtitle: [
  201. {required: true, message: '请输入副标题', trigger: 'blur'},
  202. ],
  203. category_link: [
  204. {required: true, message: '请输入分类跳转链接', trigger: 'blur'},
  205. ],
  206. },
  207. uploadShow: false,
  208. typeStatus: '',
  209. selNum: '',
  210. chooseImgName: '',
  211. submit_url: '',
  212. showVisible: false,
  213. searchForm: {
  214. member_key: ''
  215. },
  216. dialogFormVisible: false,
  217. supplier: [],
  218. storesPage: 1
  219. }
  220. },
  221. methods: {
  222. returnModule() {
  223. history.back()
  224. },
  225. submitForm() {
  226. if (this.srepeated_submit) return false
  227. let formData = new FormData();
  228. formData.append('sort', this.form.sort)
  229. formData.append('title', this.form.title)
  230. formData.append('subtitle', this.form.subtitle)
  231. formData.append('status', this.form.status)
  232. formData.append('select_supplier', JSON.stringify(this.form.select_supplier))
  233. formData.append('category_link', this.form.category_link)
  234. formData.append('switch_second', this.form.switch_second)
  235. formData.append('carousel_first_img', this.form.carousel_first_img)
  236. formData.append('carousel_first_link', this.form.carousel_first_link)
  237. formData.append('carousel_second_img', this.form.carousel_second_img)
  238. formData.append('carousel_second_link', this.form.carousel_second_link)
  239. formData.append('carousel_third_img', this.form.carousel_third_img)
  240. formData.append('carousel_third_link', this.form.carousel_third_link)
  241. this.$refs['form'].validate((valid) => {
  242. if (valid) {
  243. this.srepeated_submit = true
  244. this.$http.post(`{!! yzWebFullUrl('plugin.pc-terminal-two.backend.supplier-module.generate') !!}`, formData).then(function (response) {
  245. if (response.data.result) {
  246. this.$message({
  247. message: response.data.msg,
  248. type: 'success'
  249. });
  250. setTimeout(function () {
  251. window.location.href = `{!! yzWebUrl('plugin.pc-terminal-two.backend.supplier-module.index') !!}`
  252. }, 200);
  253. } else {
  254. this.$message({
  255. message: response.data.msg,
  256. type: 'error'
  257. });
  258. }
  259. }, function (response) {
  260. this.$message({
  261. message: response.data.msg,
  262. type: 'error'
  263. });
  264. });
  265. } else {
  266. this.srepeated_submit = false
  267. this.$message({
  268. message: '请检查输入参数',
  269. type: 'error'
  270. });
  271. return false;
  272. }
  273. });
  274. },
  275. clearImg(img) {
  276. this.form[img] = '';
  277. this.form[img + '_url'] = '';
  278. this.$forceUpdate();
  279. },
  280. openUpload(str, type, sel) {
  281. this.chooseImgName = str;
  282. this.uploadShow = true;
  283. this.typeStatus = String(type)
  284. this.selNum = sel
  285. },
  286. sureImg(name, uploadShow, fileList) {
  287. if (fileList.length <= 0) {
  288. return
  289. }
  290. this.form[name] = fileList[0].attachment
  291. this.form[name + '_url'] = fileList[0].url
  292. },
  293. changeProp(val) {
  294. if (val == true) {
  295. this.uploadShow = false;
  296. } else {
  297. this.uploadShow = true;
  298. }
  299. },
  300. getSupplier() {
  301. let params = {
  302. search: this.searchForm,
  303. page: this.storesPage
  304. }
  305. this.$http.post(`{!! yzWebFullUrl('plugin.pc-terminal-two.backend.supplier-module.search-supplier') !!}`, params).then(function (response) {
  306. if (response.data.result) {
  307. this.supplier = response.data.data
  308. }
  309. });
  310. },
  311. selectSupplier(supplier)
  312. {
  313. let selected = {
  314. id: supplier.id,
  315. nickname: supplier.has_one_member.nickname,
  316. thumb: supplier.has_one_member.avatar_image
  317. }
  318. let found = this.form.select_supplier.find(item => { return item.id === selected.id })
  319. if (!found) {
  320. this.form.select_supplier.push(selected)
  321. }
  322. },
  323. querySupplier() {
  324. if (!this.supplier_open) {
  325. this.$message({
  326. message: '请开启供应商插件',
  327. type: 'error'
  328. });
  329. return;
  330. }
  331. this.dialogFormVisible = true
  332. this.getSupplier()
  333. },
  334. searchStorePage(page) {
  335. this.storesPage = page
  336. this.getSupplier()
  337. },
  338. delStore(store_id) {
  339. this.form.select_supplier.splice(this.form.select_supplier.findIndex(e => e.id === store_id), 1)
  340. }
  341. }
  342. })
  343. </script>
  344. <style>
  345. .createModule {
  346. background-color: #e5f6f1;
  347. color: #48c1a7;
  348. }
  349. .storeInfo {
  350. display: flex;
  351. flex-wrap: wrap;
  352. }
  353. .storeInfoL {
  354. margin-right: 10px;
  355. margin-top: 10px;
  356. display: flex;
  357. flex-direction: column;
  358. position: relative;
  359. background: white;
  360. }
  361. .iconSet {
  362. position: absolute;
  363. right: 2px;
  364. top: 1px;
  365. z-index: 1;
  366. }
  367. </style>
  368. @endsection