index.vue 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. <script>
  2. import RoundedTitle from "@/components/public/roundedTitle.vue";
  3. import BigTitle from "@/components/public/bigTitle.vue";
  4. import InputRow from "@/components/public/form/inputRow.vue";
  5. import ImageViewer from "@/components/public/imageViewer.vue";
  6. import {FormVerify} from "kind-form-verify";
  7. import {fieldCheck} from "@/until/form/fieldVerify";
  8. import {isEmpty} from "@/until/typeTool";
  9. import {initForm} from "@/until/formTool";
  10. import ImageTable from "@/components/public/imageTable.vue";
  11. import Pop from "@/components/public/pop.vue";
  12. import PopCard from "@/components/public/popCard.vue";
  13. import {apiMap} from "@/map/apiMap";
  14. import {handle} from "@/until/handle";
  15. import {rCode} from "@/map/rcodeMap_esm";
  16. let formVerify = null;
  17. export default {
  18. name: 'baseSetting',
  19. components: {
  20. PopCard, Pop, ImageTable,
  21. ImageViewer,
  22. InputRow,
  23. RoundedTitle,
  24. BigTitle
  25. },
  26. data() {
  27. return {
  28. editId: 0,
  29. form: {
  30. wx_qrc: {
  31. val: '',
  32. init: '',
  33. msg: '',
  34. state: 0,
  35. reCheckField: 'fileData',
  36. },
  37. addr: {
  38. val: '',
  39. init: '',
  40. msg: '',
  41. state: 0,
  42. },
  43. tel: {
  44. val: '',
  45. init: '',
  46. msg: '',
  47. state: 0,
  48. },
  49. fax: {
  50. val: '',
  51. init: '',
  52. msg: '',
  53. state: 0,
  54. },
  55. email: {
  56. val: '',
  57. init: '',
  58. msg: '',
  59. state: 0,
  60. },
  61. shop_addr: {
  62. val: '',
  63. init: '',
  64. msg: '',
  65. state: 0,
  66. reCheckField: 'url'
  67. }
  68. },
  69. imagePopShow: false,
  70. imagePopLoading: false,
  71. imageSelect: {
  72. type: '',
  73. param: ''
  74. },
  75. }
  76. },
  77. beforeMount() {
  78. formVerify = new FormVerify(
  79. this.form,
  80. fieldCheck,
  81. )
  82. formVerify.onLog = (msg) => {
  83. console.log(msg);
  84. };
  85. this.fetchData()
  86. },
  87. beforeDestroy() {
  88. formVerify = null;
  89. },
  90. methods: {
  91. initForm(){
  92. initForm(this.form);
  93. this.form.wx_qrc.showText = this.form.wx_qrc.val;
  94. this.$forceUpdate()
  95. },
  96. /**
  97. * 图片路径处理, 兼容手动上传的图片与后期自动增加的图片
  98. * @param text
  99. * @return {*|string|string}
  100. */
  101. imagePathBabel(text){
  102. return text?text.charAt(0) == '/'? text : '/public/'+text : ''
  103. },
  104. openImageSelect(type, param){
  105. this.imageSelect = {type, param}
  106. this.imagePopShow = true;
  107. },
  108. selectImageHandle(fileData){
  109. this.form.wx_qrc.val = fileData.filePath
  110. this.form.wx_qrc.msg = '';
  111. this.form.wx_qrc.state = 0;
  112. this.form.wx_qrc.showText = fileData.filePath
  113. },
  114. async onSubmitHandle(){
  115. if(!formVerify.checkForm(this.form, true)){
  116. return this.$message.error('表单校验失败')
  117. }
  118. let formData = formVerify.getFormData();
  119. formData.id = this.editId;
  120. let url = apiMap.baseInfoEdit.path;
  121. let actionText = '保存';
  122. let [err,res] = await handle(this.$axios.post(
  123. url,
  124. formData
  125. ));
  126. if(err){
  127. console.log(err);
  128. return this.$message.error(`${actionText}失败`);
  129. }
  130. let result = res.data;
  131. if (result.code === rCode.OK){
  132. this.$message.success(`${actionText}成功`);
  133. }else{
  134. this.$message.error(`${actionText}失败,${result.msg}`);
  135. }
  136. },
  137. async fetchData(){
  138. let url = apiMap.baseInfo.path;
  139. this.loading = true;
  140. let [err, res] = await handle(this.$axios.get(url));
  141. this.loading = false;
  142. if(err){
  143. this.$message.error('获取基础信息失败');
  144. return console.log(err);
  145. }
  146. let result = res.data;
  147. if (result.code !== rCode.OK) {
  148. this.$message.error(`获取产品信息失败,${result.msg}`)
  149. return
  150. }
  151. console.log(result)
  152. let data = result.data;
  153. this.editId = data.id;
  154. this.form.wx_qrc.init = data.wx_qrc;
  155. this.form.addr.init = data.addr;
  156. this.form.tel.init = data.tel;
  157. this.form.fax.init = data.fax;
  158. this.form.email.init = data.email;
  159. this.form.shop_addr.init = data.shop_addr;
  160. this.initForm()
  161. }
  162. }
  163. }
  164. </script>
  165. <template>
  166. <div class="manager-con">
  167. <div class="manager-title">
  168. <div class="big-title justify-start py-2">
  169. <span>
  170. 基础信息配置
  171. </span>
  172. <div class="hr"></div>
  173. </div>
  174. </div>
  175. <div class="manager-show">
  176. <input-row class="mt-3"
  177. :msg="form.tel.msg"
  178. :label-width="120"
  179. label="公司电话">
  180. <a-input class="!w-48 "
  181. v-model="form.tel.val"
  182. placeholder="请输入公司电话"></a-input>
  183. </input-row>
  184. <input-row class="mt-3"
  185. :msg="form.fax.msg"
  186. :label-width="120"
  187. label="公司传真">
  188. <a-input class="!w-48 "
  189. v-model="form.fax.val"
  190. placeholder="请输入公司传真"></a-input>
  191. </input-row>
  192. <input-row class="mt-3"
  193. :msg="form.email.msg"
  194. :label-width="120"
  195. label="公司邮箱">
  196. <a-input class="!w-48 "
  197. v-model="form.email.val"
  198. placeholder="请输入公司邮箱"></a-input>
  199. </input-row>
  200. <input-row class="mt-3"
  201. :msg="form.addr.msg"
  202. :label-width="120"
  203. label="公司地址">
  204. <a-input class="!w-1/2 "
  205. v-model="form.addr.val"
  206. placeholder="请输入公司地址"></a-input>
  207. </input-row>
  208. <input-row class="mt-3"
  209. :msg="form.shop_addr.msg"
  210. :label-width="120"
  211. label="网店地址">
  212. <a-input class="!w-1/2 "
  213. v-model="form.shop_addr.val"
  214. placeholder="网店的访问链接"></a-input>
  215. </input-row>
  216. <input-row class="mt-3"
  217. :msg="form.wx_qrc.msg"
  218. :label-width="120"
  219. label="微信二维码"
  220. remark="在网站浏览时显示联络用的二维码"
  221. >
  222. <div class="rounded relative" style="width: 524px;height: 360px" >
  223. <image-viewer class="" :src="imagePathBabel(form.wx_qrc.showText)"
  224. :alt="form.wx_qrc.showText" ></image-viewer>
  225. <div class="absolute w-full h-full left-0 top-0
  226. justify-center text-white bg-gray-400
  227. items-center text-2xl flex opacity-0 hover:opacity-70"
  228. @click="openImageSelect()"
  229. >
  230. 点击选择产品图片
  231. </div>
  232. </div>
  233. </input-row>
  234. <div class="mt-2">
  235. <a-button type="primary" @click="onSubmitHandle">
  236. 保存
  237. </a-button>
  238. </div>
  239. </div>
  240. <!-- 图片选择弹窗 -->
  241. <pop :show="imagePopShow" :loading="imagePopLoading">
  242. <pop-card>
  243. <template slot="header">
  244. <span>选择需要插入的图片</span>
  245. </template>
  246. <image-table
  247. class="w-full h-full"
  248. @cancel="imagePopShow = false"
  249. @ok="selectImageHandle">
  250. </image-table>
  251. </pop-card>
  252. </pop>
  253. </div>
  254. </template>
  255. <style scoped>
  256. </style>