add-edit.php 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824
  1. <?php
  2. use common\helpers\ComponentHelper;
  3. ComponentHelper::loadComponentView('com-dialog-select');
  4. ComponentHelper::loadComponentView('com-select-cat');
  5. ComponentHelper::loadComponentView('com-rich-text');
  6. ComponentHelper::loadComponentView('com-image');
  7. ComponentHelper::loadComponentView('com-qq-map');
  8. ComponentHelper::loadComponentView('com-dialog-store');
  9. ?>
  10. <div id="app" v-cloak>
  11. <el-card class="box-card" shadow="never" style="border:0;min-width: 1500px;" body-style="background-color: #f3f3f3;padding: 10px 0 0;">
  12. <div class="form-body">
  13. <el-form :model="ruleForm" :rules="rules" size="small" ref="ruleForm" label-width="150px" v-loading="listLoading">
  14. <el-row>
  15. <el-col :span="24">
  16. <el-form-item label="模板门店" prop="is_set_template" v-if="is_template == 1">
  17. <template>
  18. <el-switch v-model="ruleForm.is_set_template" :active-value="1" :inactive-value="0">
  19. </el-switch>
  20. </template>
  21. <div class="tips-text" >
  22. 开启后后台添加门店显示模板门店开关,可以同步模板门店的相关数据,例如:商品信息等
  23. </div>
  24. </el-form-item>
  25. <el-form-item label="模板门店" prop="store_id" v-if="is_template == 1 && ruleForm.is_set_template == 1">
  26. <com-dialog-store :multiple="false" @selected="storeSelect" title="修改门店">
  27. <el-button type="primary" size="mini">选择门店</el-button>
  28. </com-dialog-store>
  29. </el-form-item>
  30. <el-form-item v-if="is_template == 1 && ruleForm.is_set_template == 1">
  31. <div style="width: 80%;">
  32. <el-table :data="migrationStore" border style="width: 100%; margin-bottom: 10px">
  33. <el-table-column prop="id" align="center" label="门店ID"></el-table-column>
  34. <el-table-column prop="store_name,logo_img,shop_mobile" align="center" label="门店名称">
  35. <template slot-scope="scope">
  36. <div style="display: flex;justify-content: center;align-items: center">
  37. <com-image mode="aspectFill" :src="scope.row.logo_img"></com-image>
  38. <div style="text-align: left; box-sizing: border-box;padding-left: 10px">
  39. <div>{{scope.row.store_name}}</div>
  40. <div>
  41. <span>{{ scope.row.shop_mobile }}</span>
  42. </div>
  43. </div>
  44. </div>
  45. </template>
  46. </el-table-column>
  47. </el-table>
  48. </div>
  49. </el-form-item>
  50. <el-form-item label="" prop="">
  51. <el-button type="primary" style="padding:9px 40px" size="small" @click.sync='chooseUser'>选择会员 </el-button>
  52. </el-form-item>
  53. <el-form-item label="选中会员" v-if="userInfo.id">
  54. <div style="display: inline-block; margin-left: 15px;">会员ID:<span>{{userInfo.id}}</span></div>
  55. <div style="display: inline-block; margin-left: 15px;">会员昵称:<span>{{userInfo.nickname}}</span></div>
  56. </el-form-item>
  57. <el-form-item label="店长姓名" prop="shop_owner">
  58. <el-input size="small" v-model="ruleForm.shop_owner" size="small" placeholder="请输入店长姓名"></el-input>
  59. </el-form-item>
  60. <el-form-item label="手机号" prop="shop_mobile">
  61. <el-input size="small" v-model="ruleForm.shop_mobile" size="small" placeholder="请输入店长手机号"></el-input>
  62. <span style="color: red;">*</span><span style="color:#B9B9B9;">注:手机号为商家后台登录的账号</span>
  63. </el-form-item>
  64. <el-form-item label="门店名称" prop="store_name">
  65. <el-input size="small" v-model="ruleForm.store_name" size="small" placeholder="请输入门店名称"></el-input>
  66. </el-form-item>
  67. <!--<el-form-item label="门店分类" prop="c_id">
  68. <div class="item-box" flex="dir:left cross:center">
  69. <el-select v-model="ruleForm.c_id" class="select" size="small" style="width: 130px;">
  70. <el-option :key="0" label="所有分类" :value="0"></el-option>
  71. <el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in categorys"></el-option>
  72. </el-select>
  73. </div>
  74. </el-form-item>-->
  75. <el-form-item label="门店分类:" prop="c_id">
  76. <el-cascader v-model="ruleForm.cIds" placeholder="试试搜索:指南"
  77. :options="category"
  78. filterable
  79. ref="cascaderRef"
  80. @change="handleCascaderChange"
  81. >
  82. </el-cascader>
  83. </el-form-item>
  84. <el-form-item label="门店简介" prop="store_desc">
  85. <el-input type="textarea" size="small" v-model="ruleForm.store_desc" size="small" placeholder="请输入门店简介" maxlength="255" show-word-limit></el-input>
  86. </el-form-item>
  87. <el-form-item prop="logo_img" class="com-goods" label="商家LOGO">
  88. <div class="pic-url-remark">
  89. 建议尺寸 120px*120px
  90. </div>
  91. <template v-if="ruleForm.logo_img">
  92. <div style="margin-right: 20px;position: relative;display: inline-block;">
  93. <com-attachment :multiple="false" :max="1" type="images">
  94. <com-image mode="aspectFill" width="100px" height='100px' :src="ruleForm.logo_img"> </com-image>
  95. </com-attachment>
  96. <el-button class="del-btn" size="mini" type="danger" icon="el-icon-close" circle @click="delPic('logo_img')"></el-button>
  97. </div>
  98. </template>
  99. <template v-if="!ruleForm.logo_img">
  100. <com-attachment :multiple="false" :max="1" type="images" @selected="selectedImg($event, 'logo_img')">
  101. <el-tooltip class="item" effect="dark" content="建议尺寸:120px * 120px" placement="top">
  102. <div flex="main:center cross:center" class="add-image-btn">
  103. + 添加图片
  104. </div>
  105. </el-tooltip>
  106. </com-attachment>
  107. </template>
  108. </el-form-item>
  109. <el-form-item prop="license_img" class="com-goods" label="营业执照">
  110. <div class="pic-url-remark">
  111. 建议尺寸 686*485
  112. </div>
  113. <template v-if="ruleForm.license_img">
  114. <div style="margin-right: 20px;position: relative;display: inline-block;">
  115. <com-attachment v-model="ruleForm.license_img">
  116. <com-image v-if="ruleForm.license_img" mode="aspectFill" width="100px" height='100px' :src="ruleForm.license_img"> </com-image>
  117. </com-attachment>
  118. <el-button class="del-btn" size="mini" type="danger" icon="el-icon-close" circle @click="delPic('license_img')"></el-button>
  119. </div>
  120. </template>
  121. <template v-if="!ruleForm.license_img">
  122. <com-attachment :multiple="false" :max="1" type="images" @selected="selectedImg($event, 'license_img')">
  123. <div flex="main:center cross:center" class="add-image-btn">
  124. + 添加图片
  125. </div>
  126. </com-attachment>
  127. </template>
  128. </el-form-item>
  129. <el-form-item label="所在区域:" prop="province_id">
  130. <div class="flex flex-y-center">
  131. <el-select v-model="province_name" value-key='id' placeholder="请选择省" @change="regionChange($event, 1)">
  132. <el-option v-for="item in provinces" :key="item.id" :label="item.name" :value="item"></el-option>
  133. </el-select>
  134. <el-select v-model="city_name" value-key='id' placeholder="请选择市" @change="regionChange($event, 2)">
  135. <el-option v-for="item in citys" :key="item.id" :label="item.name" :value="item"></el-option>
  136. </el-select>
  137. <el-select v-model="district_name" value-key='id' placeholder="请选择区" @change='regionChange($event, 3)'>
  138. <el-option v-for="item in districts" :key="item.id" :label="item.name" :value="item"></el-option>
  139. </el-select>
  140. <el-select v-model="street_name" value-key='id' placeholder="请选择街道" @change='regionChange($event, 4)'>
  141. <el-option v-for="item in streets" :key="item.id" :label="item.name" :value="item"></el-option>
  142. </el-select>
  143. <el-select v-model="community_name" value-key='id' v-if="community_status" placeholder="请选择社区" @change="regionChange($event, 5)">
  144. <el-option v-for="item in communitys" :key="item.id" :label="item.community_name" :value="item"></el-option>
  145. </el-select>
  146. </div>
  147. </el-form-item>
  148. <el-form-item label="详细地址" prop="address">
  149. <el-input size="small" v-model="ruleForm.address" v-mtfocus size="small" placeholder="请输入门店详细地址"></el-input>
  150. </el-form-item>
  151. <el-form-item label="经纬度" prop="">
  152. <el-input size="small" v-model="long_lat" size="small" disabled></el-input>
  153. </el-form-item>
  154. <!-- 地图 start -->
  155. <com-qq-map @map-submit="mapEvent" :address="show_address" :lat="ruleForm.latitude"
  156. :long="ruleForm.longitude">
  157. <el-button type="primary" @click="updateAddress()">展开地图</el-button>
  158. </com-qq-map>
  159. <!-- 地图 end -->
  160. </el-col>
  161. </el-row>
  162. </el-form>
  163. </div>
  164. <el-button class="button-item" style="margin-bottom: 15px;" type="primary" @click="submitForm('ruleForm')" size="small" :loading="btnLoading">保存
  165. </el-button>
  166. </el-card>
  167. <el-dialog title="添加会员" :visible.sync="dialogVisible" width="50%">
  168. <div class="search-box">
  169. <div class="input-item">
  170. <el-input @keyup.enter.native="getUser" size="small" placeholder="请输入会员ID" v-model="searchData.user_id"> </el-input>
  171. </div>
  172. <div class="input-item">
  173. <el-input @keyup.enter.native="getUser" size="small" placeholder="会员昵称/手机号" v-model="searchData.keyword"> </el-input>
  174. </div>
  175. <el-button type="primary" size="small" @click="getUser">搜索</el-button>
  176. <el-button type="warning" size="small" @click="clereSearch" v-if="searchData.keyword || searchData.user_id" style="padding: 9px 15px !important;">清除搜索条件</el-button>
  177. </div>
  178. <el-table :data="userList" stripe v-loading="userListLoading" style="width: 100%" @current-change="clickChange">
  179. <el-table-column prop="date" width="50">
  180. <template slot-scope="scope">
  181. <el-radio v-model="userInfo" :label="scope.row"><i></i></el-radio>
  182. </template>
  183. </el-table-column>
  184. <el-table-column prop="id" label="ID" width="80"> </el-table-column>
  185. <el-table-column prop="avatar_url" label="会员" width="80">
  186. <template slot-scope="scope">
  187. <el-image style="width: 60px; height: 60px" :src="scope.row.avatar_url" fit="cover"></el-image>
  188. </template>
  189. </el-table-column>
  190. <el-table-column prop="nickname" width="180"> </el-table-column>
  191. <el-table-column prop="mobile" label="手机号" width="200">
  192. </el-table-column>
  193. <el-table-column prop="level_name" label="会员等级">
  194. <template slot-scope="scope">
  195. <div v-if="scope.row.level > 0">等级{{scope.row.level_name}}</div>
  196. <div v-else>普通用户</div>
  197. </template>
  198. </el-table-column>
  199. <el-table-column prop="parent_nickname" label="已绑定推荐人">
  200. </el-table-column>
  201. </el-table>
  202. <div style="text-align: right;margin: 20px 0;">
  203. <el-pagination @current-change="pagination" background layout="prev, pager, next" :page-count="pageCount"></el-pagination>
  204. </div>
  205. <span slot="footer" class="dialog-footer">
  206. <el-button @click="dialogVisible = false">取 消</el-button>
  207. <el-button type="primary" @click="selectUser">确 定</el-button>
  208. </span>
  209. </el-dialog>
  210. </div>
  211. <script>
  212. const app = new Vue({
  213. el: '#app',
  214. data() {
  215. return {
  216. listLoading: false,
  217. btnLoading: false,
  218. userListLoading: false,
  219. dialogVisible: false,
  220. is_template: 0,
  221. migrationStore: [],
  222. ruleForm: {
  223. is_set_template: 0,
  224. template_store_id: 0,
  225. address:'',
  226. },
  227. categorys: [],
  228. provinces: [],
  229. provinceInfo: {},
  230. citys: [],
  231. cityInfo: {},
  232. districts: [],
  233. districtInfo: {},
  234. streets: [],
  235. streetInfo: {},
  236. communitys: [],
  237. communityInfo: {},
  238. community_status: 0,
  239. province_name: '',
  240. city_name: '',
  241. district_name: '',
  242. street_name: '',
  243. community_name: '',
  244. show_address: '',
  245. userList: [],
  246. userInfo: {},
  247. searchData: {
  248. user_id: null,
  249. keyword: '',
  250. },
  251. currPage: 1,
  252. pageCount: 0,
  253. rules: {
  254. shop_owner: [{
  255. required: true,
  256. message: '店长姓名不能为空',
  257. trigger: 'blur'
  258. }, ],
  259. shop_mobile: [{
  260. required: true,
  261. message: '店长手机号不能为空',
  262. trigger: 'blur'
  263. }, ],
  264. store_name: [{
  265. required: true,
  266. message: '门店名称不能为空',
  267. trigger: 'blur'
  268. }, ],
  269. // address: [{
  270. // required: true,
  271. // message: '门店详细地址不能为空',
  272. // trigger: 'blur'
  273. // }, ],
  274. },
  275. page: 1,
  276. pageCount: 0,
  277. long_lat: '', // 经纬度
  278. category: [],
  279. c_id: '',
  280. };
  281. },
  282. mounted() {
  283. this.loadData();
  284. },
  285. methods: {
  286. loadData() {
  287. let self = this;
  288. self.listLoading = true;
  289. request({
  290. params: {
  291. r: 'store/store/storage',
  292. },
  293. method: 'get',
  294. }).then(e => {
  295. this.getCategory();
  296. self.listLoading = false;
  297. if (e.data.code == 0) {
  298. self.categorys = e.data.data.list;
  299. self.provinces = e.data.data.provinces;
  300. this.community_status = e.data.data.community_status;
  301. self.migrationStore = e.data.data.enter.template_store;
  302. self.is_template = e.data.data.enter.is_template;
  303. self.ruleForm.template_store_id = e.data.data.enter.template_store_id;
  304. self.ruleForm.is_set_template = e.data.data.enter.is_template;
  305. }
  306. }).catch(e => {
  307. console.log(e);
  308. self.listLoading = false;
  309. self.$message.error('网络错误');
  310. });
  311. },
  312. submitForm(formName) {
  313. let self = this;
  314. if (1 == self.ruleForm.is_set_template && !self.ruleForm.template_store_id ) {
  315. self.$message.error('请选择模板门店');
  316. return false;
  317. }
  318. if (!self.ruleForm.user_id) {
  319. self.$message.error('请选择关联会员');
  320. return false;
  321. }
  322. if (!self.ruleForm.logo_img) {
  323. self.$message.error('请上传商家LOGO图片');
  324. return false;
  325. }
  326. if (!self.ruleForm.license_img) {
  327. self.$message.error('请上传营业执照图片');
  328. return false;
  329. }
  330. if (!self.ruleForm.c_id) {
  331. self.$message.error('请选择门店分类');
  332. return false;
  333. }
  334. if (!self.ruleForm.province_id || !self.ruleForm.city_id || !self.ruleForm.district_id || !self.ruleForm.street_id) {
  335. self.$message.error('请选择完善门店地址');
  336. return false;
  337. }
  338. self.btnLoading = true;
  339. self.$refs[formName].validate((valid, obj) => {
  340. if (valid) {
  341. request({
  342. params: {
  343. r: 'store/store/storage',
  344. },
  345. method: 'post',
  346. data: self.ruleForm,
  347. }).then(e => {
  348. self.btnLoading = false;
  349. if (e.data.code == 0) {
  350. self.$message.success('保存成功');
  351. } else {
  352. self.$message.error(e.data.msg);
  353. }
  354. }).catch(e => {
  355. self.btnLoading = false;
  356. console.log(e);
  357. self.$message.error('网络错误');
  358. return false;
  359. });
  360. } else {
  361. self.btnLoading = false;
  362. var msg = '';
  363. for (let index in obj) {
  364. msg = msg + '*' + obj[index][0].message + ' ';
  365. }
  366. this.$message({
  367. message: msg,
  368. type: 'error'
  369. });
  370. return false;
  371. }
  372. });
  373. },
  374. selectedImg(e, key) {
  375. // console.log('ddddd: ', e, key);
  376. this.ruleForm[key] = e[0].url;
  377. this.$forceUpdate();
  378. },
  379. delPic(key) {
  380. this.ruleForm[key] = '';
  381. this.$forceUpdate();
  382. },
  383. // 省市区三级联动
  384. regionChange(val,level) {
  385. if (level < 4 && val.lng !== "" && val.lat !== "") {
  386. this.ruleForm.longitude = val.lng;
  387. this.ruleForm.latitude = val.lat;
  388. this.long_lat = val.lng + '-' + val.lat;
  389. }
  390. switch (level) {
  391. case 1:
  392. this.ruleForm.province_id = val.id;
  393. this.ruleForm.city_id = 0
  394. this.ruleForm.district_id = 0
  395. this.ruleForm.street_id = 0
  396. this.ruleForm.community_id = 0
  397. this.province_name = val.name;
  398. this.city_name = '';
  399. this.district_name = '';
  400. this.street_name = '';
  401. this.community_name = '';
  402. this.citys = '';
  403. this.districts = '';
  404. this.streets = '';
  405. this.communitys = '';
  406. break;
  407. case 2:
  408. this.ruleForm.city_id = val.id;
  409. this.ruleForm.district_id = 0
  410. this.ruleForm.street_id = 0
  411. this.ruleForm.community_id = 0
  412. this.city_name = val.name;
  413. this.district_name = '';
  414. this.street_name = '';
  415. this.community_name = '';
  416. this.districts = '';
  417. this.streets = '';
  418. this.communitys = '';
  419. break;
  420. case 3:
  421. this.ruleForm.district_id = val.id;
  422. this.ruleForm.street_id = 0
  423. this.ruleForm.community_id = 0
  424. this.district_name = val.name;
  425. this.street_name = '';
  426. this.community_name = '';
  427. this.streets = '';
  428. this.communitys = '';
  429. break;
  430. case 4:
  431. this.ruleForm.street_id = val.id;
  432. this.ruleForm.community_id = 0
  433. this.street_name = val.name;
  434. this.community_name = '';
  435. this.communitys = '';
  436. break;
  437. case 5:
  438. this.ruleForm.community_id = val.id;
  439. this.community_name = val.community_name;
  440. break;
  441. }
  442. this.getCity(level, val.id);
  443. },
  444. // 省市区三级联动
  445. getCity(level, id ) {
  446. let self = this;
  447. request({
  448. params: {
  449. r: 'store/store/get-regions',
  450. region_id: id,
  451. level: level,
  452. },
  453. method: 'get',
  454. }).then(e => {
  455. if (e.data.code == 0) {
  456. switch (level) {
  457. case 1:
  458. self.citys = e.data.data;
  459. break;
  460. case 2:
  461. self.districts = e.data.data;
  462. break;
  463. case 3:
  464. self.streets = e.data.data;
  465. break;
  466. case 4:
  467. self.communitys = e.data.data;
  468. break;
  469. }
  470. } else {
  471. self.$message.error(e.data.msg);
  472. }
  473. }).catch(e => {
  474. console.log(e);
  475. self.$message.error('网络错误');
  476. return false;
  477. });
  478. },
  479. //选定社区
  480. communityChange(val) {
  481. console.log(val)
  482. this.communityInfo = val;
  483. this.getMapDetailData(5);
  484. },
  485. //选择通过详细地址获取经纬度
  486. getMapDetailData(level) {
  487. let address = this.provinceInfo.name + this.cityInfo.name + this.districtInfo.name;
  488. // console.log(this.districtInfo);
  489. if (level < 4 && this.districtInfo.lat !== "" && this.districtInfo.lng !== "") {
  490. return true;
  491. }
  492. if (level >= 4) {
  493. address += this.streetInfo.name;
  494. }
  495. if (level == 5) {
  496. address += this.communityInfo.community_name;
  497. }
  498. console.log(address);
  499. request({
  500. params: {
  501. r: 'common/qq-map/geocoder',
  502. },
  503. method: 'post',
  504. data: {
  505. address: address
  506. },
  507. }).then(e => {
  508. // self.btnLoading = false;
  509. if (e.data.code == 0) {
  510. this.ruleForm.longitude = e.data.data.location.lng;
  511. this.ruleForm.latitude = e.data.data.location.lat;
  512. this.long_lat = e.data.data.location.lng + '-' + e.data.data.location.lat;
  513. // console.log(e.data.data);
  514. // this.$message.success('保存成功');
  515. } else {
  516. this.$message.error(e.data.msg);
  517. }
  518. }).catch(e => {
  519. // this.btnLoading = false;
  520. console.log(e);
  521. // this.$message.error('网络错误');
  522. return false;
  523. });
  524. // console.log(address);
  525. // address += this.provinces[this.provinceInfo]
  526. },
  527. //地图确定事件
  528. mapEvent(e) {
  529. // console.log(e, '----')
  530. this.ruleForm.longitude = e.long;
  531. this.ruleForm.latitude = e.lat;
  532. this.ruleForm.ll = e.lat + ',' + e.long;
  533. let address = e.address;
  534. let reg = new RegExp(/(.*?(?:省|自治区|北京市|天津市|上海市|重庆市))+(.*?(?:市|自治州|地区|区划|县))+(.*?(?:市|区|县|镇|乡|街道))/);
  535. let rst = address.match(reg);
  536. let addr = '';
  537. if (rst) {
  538. addr += rst[1] + '/' + rst[2] + '/' + rst[3];
  539. }
  540. this.ruleForm.addr = addr;
  541. // console.log(rst, 'rst ==================');
  542. this.$forceUpdate();
  543. },
  544. updateAddress(){
  545. this.show_address = this.province_name+ this.city_name + this.district_name + this.street_name + this.community_name + this.ruleForm.address;
  546. },
  547. clearValidate(formName) {
  548. this.$refs[formName].clearValidate();
  549. },
  550. // 获取会员列表
  551. getUser() {
  552. let self = this;
  553. self.userListLoading = true;
  554. request({
  555. params: {
  556. r: 'store/store/get-users',
  557. page: self.currPage,
  558. ...self.searchData,
  559. },
  560. method: 'get',
  561. }).then(e => {
  562. self.userListLoading = false;
  563. if (e.data.code == 0) {
  564. self.userList = e.data.data.list;
  565. self.pageCount = e.data.data.page_count;
  566. } else {
  567. self.$message.error(e.data.msg);
  568. return false;
  569. }
  570. }).catch(e => {
  571. console.log(e);
  572. self.$message.error('网络错误');
  573. return false;
  574. });
  575. },
  576. // 选择会员
  577. chooseUser() {
  578. this.getUser()
  579. this.dialogVisible = true;
  580. },
  581. // 会员列表分页
  582. pagination(currentPage) {
  583. this.currPage = currentPage;
  584. this.getUser();
  585. },
  586. // 选中会员确定回调
  587. selectUser() {
  588. console.log('selectUser === : ', this.userInfo);
  589. this.ruleForm.user_id = this.userInfo.id;
  590. this.ruleForm.shop_mobile = this.userInfo.mobile;
  591. this.dialogVisible = false;
  592. },
  593. // 会员列表选中
  594. clickChange(userInfo) {
  595. this.userInfo = userInfo;
  596. },
  597. // 清楚搜索条件
  598. clereSearch() {
  599. this.searchData.user_id = null;
  600. this.searchData.keyword = '';
  601. this.getUser();
  602. },
  603. storeSelect(param) {
  604. this.migrationStore = [];
  605. this.migrationStore.push(param);
  606. this.ruleForm.template_store_id = param.id;
  607. this.ruleForm.template_store = this.migrationStore;
  608. },
  609. handleCascaderChange(selectedValues) {
  610. // 方法1:使用$refs获取选中节点(推荐)
  611. const cascader = this.$refs.cascaderRef;
  612. const selectedNodes = cascader.getCheckedNodes();
  613. if (selectedNodes && selectedNodes.length > 0) {
  614. this.ruleForm.c_id = selectedValues[selectedValues.length -1];
  615. }
  616. },
  617. getCategory() {
  618. request({
  619. params: {
  620. r: 'store/store/store-cate-tree',
  621. }
  622. }).then(res => {
  623. if (res.data.code == 0) {
  624. this.category = res.data.data.list
  625. } else {
  626. this.$message.error(res.data.msg);
  627. }
  628. });
  629. },
  630. }
  631. });
  632. </script>
  633. <style>
  634. .el-popover {
  635. padding: 30px;
  636. }
  637. .form-body {
  638. padding: 20px;
  639. background-color: #fff;
  640. margin-bottom: 20px;
  641. padding-right: 20%;
  642. min-width: 900px;
  643. }
  644. .form-body .el-form-item {
  645. padding-right: 25%;
  646. min-width: 850px;
  647. }
  648. .form-button {
  649. margin: 0;
  650. }
  651. .form-button .el-form-item__content {
  652. margin-left: 0 !important;
  653. }
  654. .button-item {
  655. padding: 9px 25px;
  656. }
  657. .check-group {
  658. font-size: 14px !important;
  659. }
  660. .check-group .el-col {
  661. display: flex;
  662. }
  663. .check-group .el-input {
  664. margin: 0 5px;
  665. }
  666. .check-group .el-col .el-checkbox {
  667. display: flex;
  668. align-items: center;
  669. }
  670. .check-group .el-col .el-input {
  671. width: 100px;
  672. }
  673. .check-group .el-col .el-input .el-input__inner {
  674. height: 30px;
  675. width: 100px;
  676. }
  677. .el-checkbox-group .el-col {
  678. margin-bottom: 10px;
  679. }
  680. .inp {
  681. width: 140px;
  682. }
  683. .inp .el-input__inner {
  684. border-radius: 4px 0 0 4px;
  685. }
  686. .inp2 {
  687. width: 60px;
  688. }
  689. .inp-text {
  690. background: #EFEFEF;
  691. border: 1px solid #E3E2E5;
  692. font-size: 15px;
  693. padding: 0px 15px;
  694. border-radius: 0 4px 4px 0;
  695. height: 32px;
  696. }
  697. /* flex公共样式 */
  698. .flex {
  699. display: -webkit-box;
  700. display: -webkit-flex;
  701. display: flex;
  702. }
  703. .flex-x-center {
  704. display: -webkit-box;
  705. display: -webkit-flex;
  706. display: flex;
  707. -webkit-box-pack: center;
  708. -webkit-justify-content: center;
  709. -ms-flex-pack: center;
  710. justify-content: center;
  711. }
  712. .flex-x-between {
  713. display: -webkit-box;
  714. display: -webkit-flex;
  715. display: flex;
  716. -webkit-box-pack: space-between;
  717. -webkit-justify-content: space-between;
  718. -ms-flex-pack: space-between;
  719. justify-content: space-between;
  720. }
  721. .flex-y-center {
  722. display: -webkit-box;
  723. display: -webkit-flex;
  724. display: flex;
  725. -webkit-box-align: center;
  726. -webkit-align-items: center;
  727. -ms-flex-align: center;
  728. -ms-grid-row-align: center;
  729. align-items: center;
  730. }
  731. .flex-y-bottom {
  732. display: -webkit-box;
  733. display: -webkit-flex;
  734. display: flex;
  735. -webkit-box-align: end;
  736. -webkit-align-items: flex-end;
  737. -ms-flex-align: end;
  738. -ms-grid-row-align: flex-end;
  739. align-items: flex-end;
  740. }
  741. .pic-url-remark {
  742. font-size: 13px;
  743. color: #c9c9c9;
  744. margin-bottom: 12px;
  745. }
  746. .add-image-btn {
  747. width: 100px;
  748. height: 100px;
  749. color: #419EFB;
  750. border: 1px solid #e2e2e2;
  751. cursor: pointer;
  752. }
  753. .del-btn {
  754. position: absolute;
  755. right: -14px;
  756. top: -14px;
  757. }
  758. /* .el-input__inner {
  759. width: 74%;
  760. } */
  761. .el-input-group {
  762. width: 69%;
  763. }
  764. .el-input.is-disabled .el-input__inner {
  765. width: 49%;
  766. }
  767. .search-box {
  768. display: flex;
  769. margin-bottom: 30px;
  770. }
  771. .input-item {
  772. width: 200px;
  773. margin-right: 16px;
  774. }
  775. </style>