edit.php 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <?php
  2. use common\helpers\ComponentHelper;
  3. ComponentHelper::loadComponentView('com-rich-text');
  4. ?>
  5. <div id="app" v-cloak>
  6. <el-card class="box-card" shadow="never" style="border:0;min-width: 1250px;" body-style="background-color: #f3f3f3;padding: 10px 0 0;">
  7. <div slot="header">
  8. <el-breadcrumb separator="/">
  9. <el-breadcrumb-item>
  10. <span style="color: #409EFF;cursor: pointer" @click="$navigate({r:'mall/optimize/list'})">优化建议</span>
  11. </el-breadcrumb-item>
  12. <el-breadcrumb-item>添加优化建议</el-breadcrumb-item>
  13. </el-breadcrumb>
  14. </div>
  15. <div class="form-body" style="padding: 20px 45% 0 10px">
  16. <el-form :model="ruleForm" :rules="rules" size="small" ref="ruleForm" label-width="160px">
  17. <el-row>
  18. <el-col :span="24">
  19. <el-form-item label="选择类目" prop="category">
  20. <ul flex="cross:center wrap:wrap">
  21. <li style="width: 125px;margin-right: 12px;" v-for="(item, type) in typeArr" :key="type">
  22. <div class="select-type" :class="item.type == ruleForm.category ? 'select-type-active' : ''" @click="categoryClick(item)">
  23. <div class="type-content" flex="main:justify cross:center">
  24. <img class="img-rg" :src="item.type == ruleForm.category ? item.active : item.unactive" alt="">
  25. <div class="cont-lf">{{item.name}}</div>
  26. </div>
  27. </div>
  28. </li>
  29. <li>
  30. <el-tooltip :disabled="disabled" placement="right-start" effect="light">
  31. <i class="el-icon-question" style="color: #9B9B9B; font-size: 16px;"></i>
  32. <div slot="content">
  33. <el-image src="<?php echo \Yii::$app->request->hostInfo . '/resources/img/admin/optimize-notice.png'; ?>"></el-image>
  34. </div>
  35. </el-tooltip>
  36. </li>
  37. </ul>
  38. </el-form-item>
  39. <el-form-item label="后台路径" prop="backend_path">
  40. <el-cascader style="width: 400px;" :options="backend_options" :props="{ multiple: true, checkStrictly: true }" clearable @change="backendChange"></el-cascader>
  41. </el-form-item>
  42. <el-form-item label="联系方式" prop="mobile">
  43. <el-input v-model="ruleForm.mobile" placeholder="请输入联系手机号" type="text" maxlength="20" show-word-limit style=" width: 260px;"></el-input>
  44. </el-form-item>
  45. <el-form-item label="建议标题" prop="title">
  46. <el-input v-model="ruleForm.title" placeholder="请输入标题" type="text" ></el-input>
  47. </el-form-item>
  48. <el-form-item label="内容描述" prop="optimize">
  49. <com-rich-text style="min-width: 750px" v-model="ruleForm.optimize"></com-rich-text>
  50. </el-form-item>
  51. <el-form-item>
  52. <el-button
  53. class="button-item"
  54. :loading="btnLoading"
  55. type="primary"
  56. @click="submitForm('ruleForm')"
  57. size="small"
  58. >保存</el-button>
  59. </el-form-item>
  60. </el-col>
  61. </el-row>
  62. </el-form>
  63. </div>
  64. </el-card>
  65. </div>
  66. <script>
  67. const app = new Vue({
  68. el: '#app',
  69. data() {
  70. return {
  71. ruleForm: {
  72. category: 'optimize',
  73. mobile: '', //当前选中等级
  74. optimize: '',
  75. annex: '',
  76. backend_path: '',
  77. },
  78. showViewer: false,
  79. backend_options: [],
  80. typeArr: [
  81. {
  82. name: '功能优化',
  83. unactive: '/resources/img/mall/optimize/optimize-unactive.png',
  84. active: '/resources/img/mall/optimize/optimize-active.png',
  85. type: 'optimize'
  86. },
  87. {
  88. name: 'BUG修复',
  89. unactive: '/resources/img/mall/optimize/bug-unactive.png',
  90. active: '/resources/img/mall/optimize/bug-active.png',
  91. type: 'bug'
  92. },
  93. {
  94. name: '其他建议',
  95. unactive: '/resources/img/mall/optimize/others-unactive.png',
  96. active: '/resources/img/mall/optimize/others-active.png',
  97. type: 'others'
  98. }
  99. ],
  100. select_img: [],
  101. rules: {
  102. category: [
  103. {required: true, message: '请选择类目', trigger: 'change'},
  104. ],
  105. mobile: [
  106. {required: true, message: '请输入手机号码', trigger: 'change'},
  107. ],
  108. title: [
  109. {required: true, message: '请输入标题内容', trigger: 'change'},
  110. ],
  111. optimize: [
  112. {required: true, message: '请输入建议内容', trigger: 'change'},
  113. ],
  114. },
  115. btnLoading: false,
  116. };
  117. },
  118. mounted() {
  119. this.getBackendMenu();
  120. },
  121. methods: {
  122. getBackendMenu() {
  123. request({
  124. params: {
  125. r: 'mall/optimize/get-backend-menu'
  126. },
  127. method: 'get',
  128. }).then(e => {
  129. if (e.data.code == 0) {
  130. this.backend_options = e.data.data
  131. } else {
  132. this.$message.error(e.data.msg);
  133. }
  134. }).catch(e => {
  135. this.$message.error(e.data.msg);
  136. });
  137. },
  138. //提交表单
  139. submitForm(formName) {
  140. let self = this;
  141. this.$refs[formName].validate((valid) => {
  142. if (valid) {
  143. self.btnLoading = true;
  144. request({
  145. params: {
  146. r: 'mall/optimize/edit'
  147. },
  148. method: 'post',
  149. data: {
  150. form: self.ruleForm,
  151. }
  152. }).then(e => {
  153. self.btnLoading = false;
  154. if (e.data.code == 0) {
  155. navigateTo({
  156. r: 'mall/optimize/list'
  157. })
  158. } else {
  159. self.$message.error(e.data.msg);
  160. }
  161. }).catch(e => {
  162. self.$message.error(e.data.msg);
  163. self.btnLoading = false;
  164. });
  165. } else {
  166. console.log('error submit!!');
  167. return false;
  168. }
  169. });
  170. },
  171. categoryClick(data) {
  172. this.ruleForm.category = data.type
  173. },
  174. backendChange(value) {
  175. if (!isEmpty(value)) this.ruleForm.backend_path = JSON.stringify(value)
  176. }
  177. }
  178. });
  179. </script>
  180. <style>
  181. .del-btn {
  182. position: relative;
  183. bottom: 95px;
  184. left: 65px;
  185. }
  186. .cont-lf {
  187. font-size: 16px;
  188. }
  189. .select-type {
  190. background-color: #F2F2F2;
  191. padding: 10px 15px;
  192. border-radius: 5px;
  193. cursor: pointer;
  194. border: 1px solid #DCDCDC;
  195. color: #9B9B9B;
  196. }
  197. .select-type-active {
  198. background-color: #F2F6FF;
  199. border: 1px solid #CEDAF6;
  200. color: #587BCE;
  201. }
  202. .img-rg {
  203. width: 25%;
  204. }
  205. </style>