qj-common 4.3.0 → 4.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/.babelrc +12 -12
  2. package/.eslintrc.js +25 -25
  3. package/.idea/common.iml +11 -11
  4. package/.idea/modules.xml +7 -7
  5. package/.idea/vcs.xml +5 -5
  6. package/.postcssrc.js +9 -9
  7. package/.prettierrc.js +7 -7
  8. package/.project +37 -37
  9. package/README.md +2 -2
  10. package/gulpfile.js +20 -20
  11. package/package.json +18 -18
  12. package/src/api/apimanage.js +146 -146
  13. package/src/api/common/index.js +192 -192
  14. package/src/api/login.js +160 -160
  15. package/src/api/shopFbu.js +515 -515
  16. package/src/api/upload.js +8 -8
  17. package/src/components/Bounced/index.vue +145 -145
  18. package/src/components/Breadcrumb/index.vue +71 -71
  19. package/src/components/Checkbox/index.vue +53 -53
  20. package/src/components/Hamburger/index.vue +48 -48
  21. package/src/components/Logistics/logic.vue +186 -186
  22. package/src/components/ScrollBar/index.vue +60 -60
  23. package/src/components/Sticky/index.vue +76 -76
  24. package/src/components/SvgIcon/index.vue +42 -42
  25. package/src/components/ThemePicker/index.vue +243 -243
  26. package/src/components/Tinymce/components/editorImage.vue +94 -94
  27. package/src/components/Tinymce/index.vue +166 -166
  28. package/src/components/Tinymce/plugins.js +7 -7
  29. package/src/components/Tinymce/toolbar.js +6 -6
  30. package/src/components/TreeTable/customEval.js +44 -44
  31. package/src/components/TreeTable/eval.js +29 -29
  32. package/src/components/TreeTable/index.vue +124 -124
  33. package/src/components/TreeTable/readme.md +89 -89
  34. package/src/components/TreeTableApi/customEval.js +49 -49
  35. package/src/components/TreeTableApi/eval.js +29 -29
  36. package/src/components/TreeTableApi/index.vue +124 -124
  37. package/src/components/TreeTableApi/readme.md +89 -89
  38. package/src/components/Upload/singleImage.vue +123 -123
  39. package/src/components/Upload/singleImage2.vue +118 -118
  40. package/src/components/Upload/singleImage3.vue +138 -138
  41. package/src/components/Upload/upload.vue +295 -295
  42. package/src/components/workOrderList/index.vue +158 -158
  43. package/src/dependencies.js +119 -119
  44. package/src/iconShop/demo.css +539 -539
  45. package/src/iconShop/demo_index.html +8445 -8445
  46. package/src/iconShop/iconfont.css +1451 -1451
  47. package/src/iconShop/iconfont.json +2522 -2522
  48. package/src/iconShop/iconfont.svg +1070 -1070
  49. package/src/iconfont/demo.css +539 -539
  50. package/src/iconfont/demo_index.html +5276 -5276
  51. package/src/iconfont/iconfont.css +905 -905
  52. package/src/iconfont/iconfont.json +1563 -1563
  53. package/src/iconfont/iconfont.svg +692 -692
  54. package/src/icons/index.js +9 -9
  55. package/src/lang/e.js +48 -48
  56. package/src/lang/en.js +48 -48
  57. package/src/lang/zh.js +48 -48
  58. package/src/main.js +62 -62
  59. package/src/permission.js +283 -283
  60. package/src/permissionForMall.backup.js +375 -375
  61. package/src/permissionForMall.js +375 -375
  62. package/src/preset.js +67 -67
  63. package/src/router/_import_common.js +1 -1
  64. package/src/router/_import_development.js +1 -1
  65. package/src/router/_import_production.js +1 -1
  66. package/src/store/getters.js +39 -39
  67. package/src/store/index.js +18 -18
  68. package/src/store/modules/app.js +34 -30
  69. package/src/store/modules/menu.js +82 -82
  70. package/src/store/modules/user.js +227 -227
  71. package/src/styles/element-ui.scss +1368 -1368
  72. package/src/styles/index.scss +166 -166
  73. package/src/styles/mixin.scss +27 -27
  74. package/src/styles/pc-ui.scss +1031 -1031
  75. package/src/styles/scrollBar.scss +21 -21
  76. package/src/styles/sidebar.scss +123 -123
  77. package/src/styles/transition.scss +32 -32
  78. package/src/styles/variables.scss +44 -44
  79. package/src/styles/wf-ui.scss +86 -86
  80. package/src/utils/auth.js +57 -57
  81. package/src/utils/dom.js +12 -12
  82. package/src/utils/getQueryString.js +5 -5
  83. package/src/utils/import.js +5 -5
  84. package/src/utils/index.js +355 -355
  85. package/src/utils/interceptor.js +34 -34
  86. package/src/utils/menu.js +116 -116
  87. package/src/utils/proapp.js +35 -35
  88. package/src/utils/query.js +26 -26
  89. package/src/utils/request.js +366 -366
  90. package/src/utils/routeMapping.js +39 -39
  91. package/src/utils/routeMapping.json +310 -310
  92. package/src/utils/utils.js +84 -84
  93. package/src/utils/validate.js +102 -102
  94. package/src/views/404.vue +72 -72
  95. package/src/views/Layout.vue +106 -106
  96. package/src/views/imgSwiper/index.vue +34 -34
  97. package/src/views/layout/Layout.vue +181 -170
  98. package/src/views/layout/components/AppMain.vue +20 -20
  99. package/src/views/layout/components/Footer.vue +22 -22
  100. package/src/views/layout/components/LeftNavbar.vue +318 -310
  101. package/src/views/layout/components/NavMenu.vue +15 -15
  102. package/src/views/layout/components/Navbar.vue +664 -661
  103. package/src/views/layout/components/Sidebar/SidebarItem.vue +116 -113
  104. package/src/views/layout/components/Sidebar/index.vue +203 -193
  105. package/src/views/layout/components/index.js +19 -19
  106. package/src/views/layout/theme/darkBlue/Layout.vue +140 -140
  107. package/src/views/layout/theme/darkBlue/components/AppMain.vue +38 -38
  108. package/src/views/layout/theme/darkBlue/components/Footer.vue +147 -147
  109. package/src/views/layout/theme/darkBlue/components/LeftNavbar(/345/261/225/347/244/272/345/205/250/351/203/250/350/217/234/345/215/225).vue +448 -448
  110. package/src/views/layout/theme/darkBlue/components/LeftNavbar.3.vue +191 -191
  111. package/src/views/layout/theme/darkBlue/components/LeftNavbar.vue +466 -466
  112. package/src/views/layout/theme/darkBlue/components/Navbar.vue +200 -200
  113. package/src/views/layout/theme/darkBlue/components/Sidebar/SidebarItem.vue +71 -71
  114. package/src/views/layout/theme/darkBlue/components/Sidebar/index.vue +49 -49
  115. package/src/views/layout/theme/darkBlue/components/index.js +15 -15
  116. package/src/views/layout-default/Layout.vue +134 -134
  117. package/src/views/layout-default/components/AppMain.vue +19 -19
  118. package/src/views/layout-default/components/Footer.vue +22 -22
  119. package/src/views/layout-default/components/LeftNavbar.vue +164 -164
  120. package/src/views/layout-default/components/Navbar.vue +295 -295
  121. package/src/views/layout-default/components/Sidebar/SidebarItem.vue +67 -67
  122. package/src/views/layout-default/components/Sidebar/index.vue +59 -59
  123. package/src/views/layout-default/components/index.js +4 -4
  124. package/src/views/layout-default/theme/darkBlue/Layout.vue +140 -140
  125. package/src/views/layout-default/theme/darkBlue/components/AppMain.vue +38 -38
  126. package/src/views/layout-default/theme/darkBlue/components/Footer.vue +147 -147
  127. package/src/views/layout-default/theme/darkBlue/components/LeftNavbar.vue +465 -465
  128. package/src/views/layout-default/theme/darkBlue/components/Navbar.vue +200 -200
  129. package/src/views/layout-default/theme/darkBlue/components/Sidebar/SidebarItem.vue +69 -69
  130. package/src/views/layout-default/theme/darkBlue/components/Sidebar/index.vue +49 -49
  131. package/src/views/layout-default/theme/darkBlue/components/index.js +15 -15
  132. package/src/views/pc/Internationalization.vue +80 -80
  133. package/src/views/pc/default/Layout.vue +442 -442
  134. package/src/views/pc/default/LayoutCard.vue +424 -424
  135. package/src/views/pc/default/assets/flex.scss +99 -99
  136. package/src/views/pc/default/footer-modules/DgFooter/index.vue +179 -179
  137. package/src/views/pc/default/footer-modules/DgFooter/indexSDX.vue +187 -187
  138. package/src/views/pc/default/footer-modules/footer.vue +171 -171
  139. package/src/views/pc/default/footer-modules/footerAns.vue +167 -167
  140. package/src/views/pc/default/footer-modules/footerBulk.vue +169 -169
  141. package/src/views/pc/default/footer-modules/footerDM.vue +254 -254
  142. package/src/views/pc/default/footer-modules/footerDefault.vue +267 -267
  143. package/src/views/pc/default/footer-modules/footerDefaultA.vue +270 -270
  144. package/src/views/pc/default/footer-modules/footerDefaultNew.vue +201 -201
  145. package/src/views/pc/default/footer-modules/footerHDB.vue +153 -153
  146. package/src/views/pc/default/footer-modules/footerHy.vue +63 -63
  147. package/src/views/pc/default/footer-modules/footerKYW.vue +163 -163
  148. package/src/views/pc/default/footer-modules/footerMh.vue +30 -30
  149. package/src/views/pc/default/footer-modules/footerNew.vue +116 -116
  150. package/src/views/pc/default/footer-modules/footer_yzj.vue +169 -169
  151. package/src/views/pc/default/footer-modules/footerayd.vue +85 -85
  152. package/src/views/pc/default/footer-modules/ymFooter.vue +154 -154
  153. package/src/views/pc/default/footer-modules/zgl.vue +250 -250
  154. package/src/views/pc/default/header-modules/DgHeader/Logo.vue +57 -57
  155. package/src/views/pc/default/header-modules/DgHeader/Search.vue +135 -135
  156. package/src/views/pc/default/header-modules/DgHeader/Settleup.vue +46 -46
  157. package/src/views/pc/default/header-modules/DgHeader/index.vue +38 -38
  158. package/src/views/pc/default/header-modules/active.vue +177 -177
  159. package/src/views/pc/default/header-modules/header.vue +97 -97
  160. package/src/views/pc/default/header-modules/headerA.vue +142 -142
  161. package/src/views/pc/default/header-modules/headerFLPT.vue +157 -157
  162. package/src/views/pc/default/header-modules/headerMh.vue +187 -187
  163. package/src/views/pc/default/header-modules/headerNew.vue +121 -121
  164. package/src/views/pc/default/header-modules/headerSDX.vue +304 -304
  165. package/src/views/pc/default/header-modules/headerStyle2.vue +173 -173
  166. package/src/views/pc/default/header-modules/headerStyle3.vue +190 -190
  167. package/src/views/pc/default/header-modules/headerStyle4.vue +163 -163
  168. package/src/views/pc/default/header-modules/headerStyleAns.vue +400 -400
  169. package/src/views/pc/default/header-modules/headerStyleBulk.vue +427 -427
  170. package/src/views/pc/default/header-modules/headerStyleDefalut.vue +209 -209
  171. package/src/views/pc/default/header-modules/headerStyleKYW.vue +435 -435
  172. package/src/views/pc/default/header-modules/headerStyle_yzj.vue +427 -427
  173. package/src/views/pc/default/header-modules/headerayd.vue +187 -187
  174. package/src/views/pc/default/header-modules/index.vue +466 -466
  175. package/src/views/pc/default/header-modules/ymHeader.vue +292 -292
  176. package/src/views/pc/default/header-modules/ysHeader.vue +248 -248
  177. package/src/views/pc/default/header-modules/zgl.vue +855 -855
  178. package/src/views/pc/default/leftMenu-modules/leftMenu-logo.vue +194 -194
  179. package/src/views/pc/default/leftMenu-modules/leftMenu-style2.vue +206 -206
  180. package/src/views/pc/default/leftMenu-modules/leftMenu-style3.vue +207 -207
  181. package/src/views/pc/default/leftMenu-modules/leftMenu-style4.vue +192 -192
  182. package/src/views/pc/default/leftMenu-modules/leftMenu.vue +183 -183
  183. package/src/views/pc/default/leftMenu-modules/leftMenuDefault.vue +212 -212
  184. package/src/views/pc/default/leftMenu-modules/leftMenuDefaultEn.vue +214 -214
  185. package/src/views/pc/default/leftMenu-modules/leftMenuDefaultFLPT.vue +220 -220
  186. package/src/views/pc/default/leftMenu-modules/leftMenuDefaultayd.vue +220 -220
  187. package/src/views/pc/default/nav-modules/nav.vue +52 -52
  188. package/src/views/pc/default/nav-modules/navAns.vue +60 -60
  189. package/src/views/pc/default/nav-modules/navBulk.vue +60 -60
  190. package/src/views/pc/default/top-modules/DgTopShortcut/index.vue +177 -177
  191. package/src/views/pc/default/top-modules/Toplg.vue +280 -280
  192. package/src/views/pc/default/top-modules/topA.vue +136 -136
  193. package/src/views/pc/default/top-modules/topAns.vue +261 -261
  194. package/src/views/pc/default/top-modules/topAns_yzj.vue +282 -282
  195. package/src/views/pc/default/top-modules/topBar.vue +304 -304
  196. package/src/views/pc/default/top-modules/topBulk.vue +280 -280
  197. package/src/views/pc/default/top-modules/topDefault.vue +244 -244
  198. package/src/views/pc/default/top-modules/topDefaultDM.vue +197 -197
  199. package/src/views/pc/default/top-modules/topDefaultNew.vue +271 -271
  200. package/src/views/pc/default/top-modules/topFLPT.vue +197 -197
  201. package/src/views/pc/default/top-modules/topHDB.vue +479 -479
  202. package/src/views/pc/default/top-modules/topKYW.vue +258 -258
  203. package/src/views/pc/default/top-modules/topMh.vue +174 -174
  204. package/src/views/pc/default/top-modules/topNew.vue +97 -97
  205. package/src/views/pc/default/top-modules/topSDX.vue +298 -298
  206. package/src/views/pc/default/top-modules/topSimple.vue +247 -247
  207. package/src/views/pc/default/top-modules/topSimpleHy.vue +256 -256
  208. package/src/views/pc/default/top-modules/topUcc.vue +264 -264
  209. package/src/views/pc/default/top-modules/topayd.vue +170 -170
  210. package/src/views/pc/default/top-modules/ymTop.vue +299 -299
  211. package/src/views/pc/default/top-modules/zgltop.vue +499 -499
  212. package/src/views/routerView.vue +9 -9
  213. package/src/views/templates/components/temp-select.vue +80 -80
  214. package/src/views/templates/components/temp-upload.vue +233 -233
  215. package/src/views/templates/readme.md +2 -2
  216. package/src/views/templates/templateInput.vue +421 -421
  217. package/src/views/templates/templateReadme.html +588 -588
  218. package/src/views/templates/templateReadme.md +619 -619
  219. package/src/views/templates/templateTable.vue +2243 -2243
  220. package/src/views/templates/templateTableData.vue +1883 -1883
  221. package/src/views/templates/templateUi/templateTableContent.vue +187 -187
  222. package/src/views/treeTemplate/index.vue +559 -559
  223. package/src/views/treeTemplate/treeTemplate.md +274 -274
  224. package/src/views/uploadDialog/index copy.vue +352 -352
  225. package/src/views/uploadDialog/index.vue +558 -558
  226. package/src/views/uploadDialog/indexOlay.vue +582 -582
  227. package/src/views/uploadDialog/indexPM.vue +578 -578
  228. package/src/views/uploadDialog/indexUpload.vue +543 -543
  229. package/src/views/uploadDialog/readme.md +45 -45
@@ -1,421 +1,421 @@
1
- <template>
2
- <div class="template-input auto">
3
- <h3 class="template-title" v-if="title">
4
- <p>{{ title }}</p>
5
- </h3>
6
- <el-form v-if="temInput" :model="ruleForm" :rules="rules ? rules : {}" ref="ruleForm" :label-width="labelWidth ? labelWidth : '10rem'" class="demo-ruleForm">
7
- <el-form-item
8
- v-for="(item, index) in temInput"
9
- :key="index"
10
- v-if="('state' in item ? item.state : true) && ('btnArray' in item ? true : 'label' in item)"
11
- :label="'label' in item && ('state' in item ? item.state : true) ? item.label + ':' : ''"
12
- :prop="'name' in item ? item.name : ''"
13
- >
14
- <div v-if="'type' in item && 'state' in item ? item.state : true">
15
- <el-input
16
- v-if="item.type === 'text'"
17
- auto-complete="new-password"
18
- :disabled="'disabled' in item && item.disabled ? item.disabled : false"
19
- v-model.trim="item.value"
20
- clearable
21
- :placeholder="'placeholder' in item ? item.placeholder : ''"
22
- @blur="inputBlur(item)"
23
- ></el-input>
24
- <el-input
25
- v-if="item.type === 'number'"
26
- :disabled="'disabled' in item && item.disabled ? item.disabled : false"
27
- type="number"
28
- v-model.trim="item.value"
29
- :min="item.min || ''"
30
- :max="item.max || ''"
31
- :placeholder="'placeholder' in item ? item.placeholder : ''"
32
- @change="numberHandler(item)"
33
- ></el-input>
34
- <el-input v-if="item.type === 'password'" type="password" v-model="item.value" auto-complete="new-password" :placeholder="'placeholder' in item ? item.placeholder : ''"></el-input>
35
- <el-select
36
- v-if="item.type === 'select'"
37
- :disabled="'disabled' in item && item.disabled ? item.disabled : false"
38
- v-model.trim="item.value"
39
- auto-complete="new-password"
40
- :placeholder="'placeholder' in item ? item.placeholder : ''"
41
- :filterable="'filterable' in item ? item.filterable : false"
42
- :multiple="'multiple' in item ? item.multiple : false"
43
- @change="selChange($event, item)"
44
- clearable
45
- >
46
- <el-option
47
- v-for="(itemOption, indexOption) in item.options"
48
- :key="indexOption"
49
- :label="'props' in item ? itemOption[item.props.label] : itemOption.label"
50
- :value="'props' in item ? itemOption[item.props.value] : itemOption.value"
51
- ></el-option>
52
- </el-select>
53
- <el-date-picker
54
- v-if="item.type === 'date' || item.type === 'datetime' || item.type === 'datetimerange' || item.type === 'daterange'"
55
- v-model.trim="item.value"
56
- :type="item.type"
57
- :placeholder="'placeholder' in item ? item.placeholder : ''"
58
- :value-format="item.format || 'yyyy-MM-dd'"
59
- :picker-options="'pickerOptions' in item ? item.pickerOptions : {}"
60
- ></el-date-picker>
61
-
62
- <temp-select v-if="item.type === 'remoteSelect'" @selChange="selChange" :item="item"></temp-select>
63
-
64
- <!-- <el-select v-if="item.type ==='select'" :readonly="'readonly' in item && item.readonly? item.readonly : false " v-model="item.value" :placeholder="'placeholder' in item ? item.placeholder : ''" @change="selChange($event,item)">
65
- <el-option v-for="(itemOption , indexOption) in item.options" :key="indexOption" :label="itemOption.pntreeName" :value="itemOption.pntreeId"></el-option>
66
- </el-select>-->
67
- <el-cascader
68
- v-if="item.type === 'cascader'"
69
- :show-all-levels="'showAllLevels' in item ? item.showAllLevels : true"
70
- :disabled="'disabled' in item && item.disabled ? item.disabled : false"
71
- :placeholder="'placeholder' in item ? item.placeholder : ''"
72
- :options="'options' in item ? item.options : []"
73
- :props="'props' in item ? item.props : {}"
74
- :collapse-tags="'collapseTags' in item ? item.collapseTags : true"
75
- filterable
76
- size="small"
77
- v-model="item.value"
78
- ></el-cascader>
79
- <el-switch v-if="item.type === 'switch'" :disabled="'disabled' in item && item.disabled ? item.disabled : false" v-model.trim="item.value"></el-switch>
80
- <el-checkbox-group v-if="item.type === 'checkbox'" :disabled="'disabled' in item && item.disabled ? item.disabled : false" v-model.trim="item.value">
81
- <el-checkbox v-for="(itemCheckbox, indexCheckbox) in item.checkboxGroup" :key="indexCheckbox" :label="itemCheckbox.value" :name="item.name">{{ itemCheckbox.label }}</el-checkbox>
82
- </el-checkbox-group>
83
- <el-radio-group :disabled="'disabled' in item && item.disabled ? item.disabled : false" v-if="item.type === 'radio'" v-model.trim="item.value" @change="radioChange(item.value, item)">
84
- <el-radio v-for="(itemRadio, indexRadio) in item.radioGroup" :key="indexRadio" :label="itemRadio.value" :name="item.name">{{ itemRadio.label }}</el-radio>
85
- </el-radio-group>
86
- <el-input v-if="item.type === 'textarea'" type="textarea" :disabled="'disabled' in item && item.disabled ? item.disabled : false" v-model.trim="item.value"></el-input>
87
- <!--input 支持搜索-->
88
- <el-autocomplete
89
- v-if="item.type === 'autocomplete'"
90
- v-model.trim="item.value"
91
- :loadAll="(restaurants = item.restaurants)"
92
- :fetch-suggestions="querySearchAsync"
93
- :placeholder="item.placeholder"
94
- @select="handleSelect"
95
- ></el-autocomplete>
96
- <temp-upload v-if="item.type === 'upload'" :item="item" :index="index"></temp-upload>
97
- <!-- 消息提示 或者提示字段 -->
98
- <template v-if="'prompt' in item">
99
- <span v-if="item.prompt.type == 'text'">{{ item.prompt.content }}</span>
100
- <el-tooltip
101
- v-if="item.prompt.type == 'tooltip'"
102
- class="item"
103
- :effect="item.prompt.effect || dark"
104
- :content="item.prompt.content || '暂无提示'"
105
- :placement="item.prompt.placement || 'right'"
106
- >
107
- <span v-html="item.prompt.html"></span>
108
- </el-tooltip>
109
- </template>
110
- </div>
111
- <el-button v-if="'btnArray' in item" v-for="(itemBtn, indexBtn) in item.btnArray" :key="indexBtn" :type="itemBtn.type" @click="btn(itemBtn, indexBtn)">{{ itemBtn.label }}</el-button>
112
- </el-form-item>
113
- </el-form>
114
-
115
- <!-- <div>rule:{{ruleForm}}</div> -->
116
- </div>
117
- </template>
118
- <script>
119
- import request from '#/utils/request';
120
- import tempSelect from './components/temp-select';
121
- import tempUpload from './components/temp-upload';
122
- const querystring = require('querystring');
123
- export default {
124
- props: ['temInput', 'rules', 'labelWidth', 'tabState', 'title'],
125
- components: {
126
- tempSelect,
127
- tempUpload,
128
- },
129
- data() {
130
- return {
131
- restaurants: null,
132
- showFileList: null, //单个图片还是多个图片状态
133
- imgLoading: false, //图片loading状态
134
- uploadName: null, //上传图片name
135
- imgIndex: null, //多个上传图片的位置
136
- uploadUrl: '/web/rs/goodsFile/uploadGoodsFile.json', //图片上传的默认url
137
- imageUrl: '', //单个图片的imgurl,
138
- };
139
- },
140
- mounted() {},
141
- methods: {
142
- btn(itemBtn, indexBtn) {
143
- if (itemBtn.id === 'reset') {
144
- //重置
145
- this.setReset();
146
- } else if (itemBtn.id == 'confirm') {
147
- //表示确定
148
- this.setData(itemBtn.url, 'ruleForm', itemBtn.params);
149
- } else if (itemBtn.id == 'cancel') {
150
- //表示取消
151
- this.$emit('cancel', itemBtn, indexBtn); //只是表示取消显示
152
- } else if (itemBtn.id == 'add') {
153
- //新增
154
- this.setData(itemBtn.url, 'ruleForm', itemBtn.params);
155
- }
156
- this.$emit('inputBtnClick', itemBtn, indexBtn);
157
- },
158
- querySearchAsync(queryString, cb) {
159
- var restaurants = this.restaurants;
160
- var results = queryString ? restaurants.filter(this.createStateFilter(queryString)) : restaurants;
161
-
162
- clearTimeout(this.timeout);
163
- this.timeout = setTimeout(() => {
164
- cb(results);
165
- }, 3000 * Math.random());
166
- },
167
- createStateFilter(queryString) {
168
- return (state) => {
169
- return state.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0;
170
- };
171
- },
172
- handleSelect(item) {
173
- console.log('开始选');
174
- this.$emit('handleSelect', item);
175
- },
176
- exceed() {
177
- //图片个数超出的验证
178
- this.$message.error(`最多上传${this.limit}张!`);
179
- },
180
- handleAvatarSuccess(res, file) {
181
- this.imageUrl = URL.createObjectURL(file.raw);
182
- console.log(this.imageUrl);
183
- },
184
- numberHandler(item) {
185
- // debugger;
186
- if ((item.min || item.min == 0) && item.value * 1 <= item.min) {
187
- item.value = item.min;
188
- }
189
- if ((item.max || item.max == 0) && item.value * 1 >= item.max) {
190
- item.value = item.max;
191
- }
192
- console.log(item, '34');
193
- },
194
- setReset() {
195
- //数据重置
196
- this.$refs['ruleForm'].resetFields();
197
- this.temInput.forEach((el) => {
198
- if ('label' in el) {
199
- if (el.type === 'cascader') {
200
- el.value = [];
201
- } else {
202
- el.value = '';
203
- }
204
- if (el.defaultValue) {
205
- el.value = el.defaultValue;
206
- }
207
- }
208
- });
209
- },
210
- clearValidate() {
211
- //清除正则
212
- this.$refs['ruleForm'].clearValidate();
213
- },
214
- inputBlur(item) {
215
- this.$emit('inputBlur', item);
216
- },
217
- radioChange(val, item) {
218
- //当需要切换改变时
219
- if (this.tabState) {
220
- this.tabState.value = this.ruleForm[this.tabState.name];
221
- for (let i in this.tabState.dataTemplate) {
222
- if (i === this.tabState.value) {
223
- this.temInput.forEach((el) => {
224
- if ('state' in el) {
225
- if (this.tabState.dataTemplate[i].includes(el.name)) {
226
- el.state = true; //是否显示
227
- } else {
228
- 'other' in el && el.other ? '' : (el.state = false);
229
- }
230
- }
231
- //清空数据
232
- if (el.value instanceof Array && ('empty' in el ? el.empty : true) && !(el.type === 'upload')) {
233
- el.value = [];
234
- } else if ('empty' in el ? el.empty : true && !(el.type === 'upload')) {
235
- el.value = '';
236
- }
237
- });
238
- }
239
- }
240
- }
241
- console.log('radio change');
242
- this.$emit('radioChange', val, item);
243
- },
244
- setData(url, formName, params) {
245
- //编辑确定
246
- this.$refs[formName].validate((valid) => {
247
- //编辑验证
248
- if (valid) {
249
- if (url) {
250
- let data = JSON.parse(JSON.stringify(this.ruleForm)); //去除数据的双向绑定
251
- this.temInput.forEach((el) => {
252
- if ('label' in el) {
253
- if (el.type === 'cascader') {
254
- if (el.value.length > 0) {
255
- if (el.format) {
256
- data[el.name] = el.format(el.value);
257
- } else {
258
- data[el.name] = el.value[el.value.length - 1];
259
- }
260
- } else {
261
- data[el.name] = '';
262
- }
263
- }
264
- }
265
- });
266
- for (let el in data) {
267
- if (data[el] === '') {
268
- delete data[el];
269
- }
270
- }
271
- //编辑请求接口
272
- let jsondata = {};
273
- let jsondataa = '';
274
- if (params) {
275
- jsondata[params] = JSON.stringify(data);
276
- // console.log(...jsondata, "llllll");
277
-
278
- request({
279
- url: url,
280
- method: 'post',
281
- data: querystring.stringify(jsondata),
282
- }).then((res) => {
283
- if (res.success) {
284
- this.$message({
285
- message: res.msg,
286
- type: 'success',
287
- });
288
- this.$emit('cancel'); //取消显示
289
- this.$emit('getData'); //成功后更新数据
290
- } else {
291
- this.$message.error(res.msg);
292
- }
293
- });
294
- } else {
295
- request({
296
- url: url,
297
- method: 'post',
298
- data: querystring.stringify(data),
299
- }).then((res) => {
300
- if (res.success) {
301
- this.$message({
302
- message: res.msg,
303
- type: 'success',
304
- });
305
- this.$emit('cancel'); //取消显示
306
- this.$emit('getData'); //成功后更新数据
307
- } else {
308
- this.$message.error(res.msg);
309
- }
310
- });
311
- }
312
- }
313
- }
314
- });
315
- },
316
- selChange(val, item) {
317
- //select选中的事件
318
- console.log(item, '目前选中的值');
319
- console.log(this.temInput);
320
- this.$emit('selChange', val, item);
321
- },
322
- },
323
- computed: {
324
- ruleForm: {
325
- get() {
326
- let ruleForm = {};
327
- // console.log(this.temInput, "ccccccccccccccc");
328
- this.temInput.forEach((el) => {
329
- if ('state' in el) {
330
- el.state && el.name ? this.$set(ruleForm, el.name, el.value) : '';
331
- } else {
332
- el.name ? this.$set(ruleForm, el.name, el.value) : '';
333
- }
334
- });
335
- // console.log(ruleForm, "ruleFormruleForm");
336
- // this.$refs["ruleForm"].resetFields();
337
- return ruleForm;
338
- },
339
- set(val) {
340
- console.log('为空');
341
- },
342
- },
343
- },
344
- };
345
- </script>
346
- <style>
347
- /* body {
348
- overflow: auto !important;
349
- } */
350
- .template-input .el-upload-list--picture-card .el-upload-list__item,
351
- .template-input .el-upload--picture-card {
352
- width: 100px;
353
- height: 100px;
354
- }
355
- .template-input .el-upload--picture-card {
356
- line-height: 104px;
357
- }
358
- .template-input .el-select {
359
- width: 220px;
360
- }
361
- .template-input .el-form-item__content .el-loading-mask {
362
- width: 102px;
363
- height: 102px;
364
- }
365
-
366
- .template-input .el-upload-add .el-loading-mask {
367
- top: -36px;
368
- right: 72px;
369
- left: initial;
370
- }
371
- .template-input .el-input {
372
- width: 220px;
373
- }
374
- </style>
375
- <style scoped>
376
- .auto {
377
- padding: 20px;
378
- }
379
-
380
- .template-title {
381
- font-weight: normal;
382
- font-size: 18px;
383
- padding-left: 10px;
384
- background: #f8f8f8;
385
- height: 46px;
386
- line-height: 46px;
387
- margin-bottom: 20px;
388
- }
389
- .template-title p {
390
- font-weight: normal;
391
- font-size: 18px;
392
- border-left: 3px solid #409eff;
393
- margin: 13px;
394
- background: #f8f8f8;
395
- line-height: 20px;
396
- padding-left: 6px;
397
- height: 20px;
398
- float: left;
399
- }
400
- .avatar-uploader-icon {
401
- font-size: 28px;
402
- color: #8c939d;
403
- width: 100px;
404
- height: 100px;
405
- line-height: 100px !important;
406
- text-align: center;
407
- border: 1px dashed #c0ccda;
408
- border-radius: 6px;
409
- background-color: #fbfdff;
410
- }
411
- .avatar {
412
- width: 100px;
413
- height: 100px;
414
- display: block;
415
- }
416
- .el-upload,
417
- .el-upload img {
418
- /* border: 1px dashed #c0ccda; */
419
- border-radius: 6px;
420
- }
421
- </style>
1
+ <template>
2
+ <div class="template-input auto">
3
+ <h3 class="template-title" v-if="title">
4
+ <p>{{ title }}</p>
5
+ </h3>
6
+ <el-form v-if="temInput" :model="ruleForm" :rules="rules ? rules : {}" ref="ruleForm" :label-width="labelWidth ? labelWidth : '10rem'" class="demo-ruleForm">
7
+ <el-form-item
8
+ v-for="(item, index) in temInput"
9
+ :key="index"
10
+ v-if="('state' in item ? item.state : true) && ('btnArray' in item ? true : 'label' in item)"
11
+ :label="'label' in item && ('state' in item ? item.state : true) ? item.label + ':' : ''"
12
+ :prop="'name' in item ? item.name : ''"
13
+ >
14
+ <div v-if="'type' in item && 'state' in item ? item.state : true">
15
+ <el-input
16
+ v-if="item.type === 'text'"
17
+ auto-complete="new-password"
18
+ :disabled="'disabled' in item && item.disabled ? item.disabled : false"
19
+ v-model.trim="item.value"
20
+ clearable
21
+ :placeholder="'placeholder' in item ? item.placeholder : ''"
22
+ @blur="inputBlur(item)"
23
+ ></el-input>
24
+ <el-input
25
+ v-if="item.type === 'number'"
26
+ :disabled="'disabled' in item && item.disabled ? item.disabled : false"
27
+ type="number"
28
+ v-model.trim="item.value"
29
+ :min="item.min || ''"
30
+ :max="item.max || ''"
31
+ :placeholder="'placeholder' in item ? item.placeholder : ''"
32
+ @change="numberHandler(item)"
33
+ ></el-input>
34
+ <el-input v-if="item.type === 'password'" type="password" v-model="item.value" auto-complete="new-password" :placeholder="'placeholder' in item ? item.placeholder : ''"></el-input>
35
+ <el-select
36
+ v-if="item.type === 'select'"
37
+ :disabled="'disabled' in item && item.disabled ? item.disabled : false"
38
+ v-model.trim="item.value"
39
+ auto-complete="new-password"
40
+ :placeholder="'placeholder' in item ? item.placeholder : ''"
41
+ :filterable="'filterable' in item ? item.filterable : false"
42
+ :multiple="'multiple' in item ? item.multiple : false"
43
+ @change="selChange($event, item)"
44
+ clearable
45
+ >
46
+ <el-option
47
+ v-for="(itemOption, indexOption) in item.options"
48
+ :key="indexOption"
49
+ :label="'props' in item ? itemOption[item.props.label] : itemOption.label"
50
+ :value="'props' in item ? itemOption[item.props.value] : itemOption.value"
51
+ ></el-option>
52
+ </el-select>
53
+ <el-date-picker
54
+ v-if="item.type === 'date' || item.type === 'datetime' || item.type === 'datetimerange' || item.type === 'daterange'"
55
+ v-model.trim="item.value"
56
+ :type="item.type"
57
+ :placeholder="'placeholder' in item ? item.placeholder : ''"
58
+ :value-format="item.format || 'yyyy-MM-dd'"
59
+ :picker-options="'pickerOptions' in item ? item.pickerOptions : {}"
60
+ ></el-date-picker>
61
+
62
+ <temp-select v-if="item.type === 'remoteSelect'" @selChange="selChange" :item="item"></temp-select>
63
+
64
+ <!-- <el-select v-if="item.type ==='select'" :readonly="'readonly' in item && item.readonly? item.readonly : false " v-model="item.value" :placeholder="'placeholder' in item ? item.placeholder : ''" @change="selChange($event,item)">
65
+ <el-option v-for="(itemOption , indexOption) in item.options" :key="indexOption" :label="itemOption.pntreeName" :value="itemOption.pntreeId"></el-option>
66
+ </el-select>-->
67
+ <el-cascader
68
+ v-if="item.type === 'cascader'"
69
+ :show-all-levels="'showAllLevels' in item ? item.showAllLevels : true"
70
+ :disabled="'disabled' in item && item.disabled ? item.disabled : false"
71
+ :placeholder="'placeholder' in item ? item.placeholder : ''"
72
+ :options="'options' in item ? item.options : []"
73
+ :props="'props' in item ? item.props : {}"
74
+ :collapse-tags="'collapseTags' in item ? item.collapseTags : true"
75
+ filterable
76
+ size="small"
77
+ v-model="item.value"
78
+ ></el-cascader>
79
+ <el-switch v-if="item.type === 'switch'" :disabled="'disabled' in item && item.disabled ? item.disabled : false" v-model.trim="item.value"></el-switch>
80
+ <el-checkbox-group v-if="item.type === 'checkbox'" :disabled="'disabled' in item && item.disabled ? item.disabled : false" v-model.trim="item.value">
81
+ <el-checkbox v-for="(itemCheckbox, indexCheckbox) in item.checkboxGroup" :key="indexCheckbox" :label="itemCheckbox.value" :name="item.name">{{ itemCheckbox.label }}</el-checkbox>
82
+ </el-checkbox-group>
83
+ <el-radio-group :disabled="'disabled' in item && item.disabled ? item.disabled : false" v-if="item.type === 'radio'" v-model.trim="item.value" @change="radioChange(item.value, item)">
84
+ <el-radio v-for="(itemRadio, indexRadio) in item.radioGroup" :key="indexRadio" :label="itemRadio.value" :name="item.name">{{ itemRadio.label }}</el-radio>
85
+ </el-radio-group>
86
+ <el-input v-if="item.type === 'textarea'" type="textarea" :disabled="'disabled' in item && item.disabled ? item.disabled : false" v-model.trim="item.value"></el-input>
87
+ <!--input 支持搜索-->
88
+ <el-autocomplete
89
+ v-if="item.type === 'autocomplete'"
90
+ v-model.trim="item.value"
91
+ :loadAll="(restaurants = item.restaurants)"
92
+ :fetch-suggestions="querySearchAsync"
93
+ :placeholder="item.placeholder"
94
+ @select="handleSelect"
95
+ ></el-autocomplete>
96
+ <temp-upload v-if="item.type === 'upload'" :item="item" :index="index"></temp-upload>
97
+ <!-- 消息提示 或者提示字段 -->
98
+ <template v-if="'prompt' in item">
99
+ <span v-if="item.prompt.type == 'text'">{{ item.prompt.content }}</span>
100
+ <el-tooltip
101
+ v-if="item.prompt.type == 'tooltip'"
102
+ class="item"
103
+ :effect="item.prompt.effect || dark"
104
+ :content="item.prompt.content || '暂无提示'"
105
+ :placement="item.prompt.placement || 'right'"
106
+ >
107
+ <span v-html="item.prompt.html"></span>
108
+ </el-tooltip>
109
+ </template>
110
+ </div>
111
+ <el-button v-if="'btnArray' in item" v-for="(itemBtn, indexBtn) in item.btnArray" :key="indexBtn" :type="itemBtn.type" @click="btn(itemBtn, indexBtn)">{{ itemBtn.label }}</el-button>
112
+ </el-form-item>
113
+ </el-form>
114
+
115
+ <!-- <div>rule:{{ruleForm}}</div> -->
116
+ </div>
117
+ </template>
118
+ <script>
119
+ import request from '#/utils/request';
120
+ import tempSelect from './components/temp-select';
121
+ import tempUpload from './components/temp-upload';
122
+ const querystring = require('querystring');
123
+ export default {
124
+ props: ['temInput', 'rules', 'labelWidth', 'tabState', 'title'],
125
+ components: {
126
+ tempSelect,
127
+ tempUpload,
128
+ },
129
+ data() {
130
+ return {
131
+ restaurants: null,
132
+ showFileList: null, //单个图片还是多个图片状态
133
+ imgLoading: false, //图片loading状态
134
+ uploadName: null, //上传图片name
135
+ imgIndex: null, //多个上传图片的位置
136
+ uploadUrl: '/web/rs/goodsFile/uploadGoodsFile.json', //图片上传的默认url
137
+ imageUrl: '', //单个图片的imgurl,
138
+ };
139
+ },
140
+ mounted() {},
141
+ methods: {
142
+ btn(itemBtn, indexBtn) {
143
+ if (itemBtn.id === 'reset') {
144
+ //重置
145
+ this.setReset();
146
+ } else if (itemBtn.id == 'confirm') {
147
+ //表示确定
148
+ this.setData(itemBtn.url, 'ruleForm', itemBtn.params);
149
+ } else if (itemBtn.id == 'cancel') {
150
+ //表示取消
151
+ this.$emit('cancel', itemBtn, indexBtn); //只是表示取消显示
152
+ } else if (itemBtn.id == 'add') {
153
+ //新增
154
+ this.setData(itemBtn.url, 'ruleForm', itemBtn.params);
155
+ }
156
+ this.$emit('inputBtnClick', itemBtn, indexBtn);
157
+ },
158
+ querySearchAsync(queryString, cb) {
159
+ var restaurants = this.restaurants;
160
+ var results = queryString ? restaurants.filter(this.createStateFilter(queryString)) : restaurants;
161
+
162
+ clearTimeout(this.timeout);
163
+ this.timeout = setTimeout(() => {
164
+ cb(results);
165
+ }, 3000 * Math.random());
166
+ },
167
+ createStateFilter(queryString) {
168
+ return (state) => {
169
+ return state.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0;
170
+ };
171
+ },
172
+ handleSelect(item) {
173
+ console.log('开始选');
174
+ this.$emit('handleSelect', item);
175
+ },
176
+ exceed() {
177
+ //图片个数超出的验证
178
+ this.$message.error(`最多上传${this.limit}张!`);
179
+ },
180
+ handleAvatarSuccess(res, file) {
181
+ this.imageUrl = URL.createObjectURL(file.raw);
182
+ console.log(this.imageUrl);
183
+ },
184
+ numberHandler(item) {
185
+ // debugger;
186
+ if ((item.min || item.min == 0) && item.value * 1 <= item.min) {
187
+ item.value = item.min;
188
+ }
189
+ if ((item.max || item.max == 0) && item.value * 1 >= item.max) {
190
+ item.value = item.max;
191
+ }
192
+ console.log(item, '34');
193
+ },
194
+ setReset() {
195
+ //数据重置
196
+ this.$refs['ruleForm'].resetFields();
197
+ this.temInput.forEach((el) => {
198
+ if ('label' in el) {
199
+ if (el.type === 'cascader') {
200
+ el.value = [];
201
+ } else {
202
+ el.value = '';
203
+ }
204
+ if (el.defaultValue) {
205
+ el.value = el.defaultValue;
206
+ }
207
+ }
208
+ });
209
+ },
210
+ clearValidate() {
211
+ //清除正则
212
+ this.$refs['ruleForm'].clearValidate();
213
+ },
214
+ inputBlur(item) {
215
+ this.$emit('inputBlur', item);
216
+ },
217
+ radioChange(val, item) {
218
+ //当需要切换改变时
219
+ if (this.tabState) {
220
+ this.tabState.value = this.ruleForm[this.tabState.name];
221
+ for (let i in this.tabState.dataTemplate) {
222
+ if (i === this.tabState.value) {
223
+ this.temInput.forEach((el) => {
224
+ if ('state' in el) {
225
+ if (this.tabState.dataTemplate[i].includes(el.name)) {
226
+ el.state = true; //是否显示
227
+ } else {
228
+ 'other' in el && el.other ? '' : (el.state = false);
229
+ }
230
+ }
231
+ //清空数据
232
+ if (el.value instanceof Array && ('empty' in el ? el.empty : true) && !(el.type === 'upload')) {
233
+ el.value = [];
234
+ } else if ('empty' in el ? el.empty : true && !(el.type === 'upload')) {
235
+ el.value = '';
236
+ }
237
+ });
238
+ }
239
+ }
240
+ }
241
+ console.log('radio change');
242
+ this.$emit('radioChange', val, item);
243
+ },
244
+ setData(url, formName, params) {
245
+ //编辑确定
246
+ this.$refs[formName].validate((valid) => {
247
+ //编辑验证
248
+ if (valid) {
249
+ if (url) {
250
+ let data = JSON.parse(JSON.stringify(this.ruleForm)); //去除数据的双向绑定
251
+ this.temInput.forEach((el) => {
252
+ if ('label' in el) {
253
+ if (el.type === 'cascader') {
254
+ if (el.value.length > 0) {
255
+ if (el.format) {
256
+ data[el.name] = el.format(el.value);
257
+ } else {
258
+ data[el.name] = el.value[el.value.length - 1];
259
+ }
260
+ } else {
261
+ data[el.name] = '';
262
+ }
263
+ }
264
+ }
265
+ });
266
+ for (let el in data) {
267
+ if (data[el] === '') {
268
+ delete data[el];
269
+ }
270
+ }
271
+ //编辑请求接口
272
+ let jsondata = {};
273
+ let jsondataa = '';
274
+ if (params) {
275
+ jsondata[params] = JSON.stringify(data);
276
+ // console.log(...jsondata, "llllll");
277
+
278
+ request({
279
+ url: url,
280
+ method: 'post',
281
+ data: querystring.stringify(jsondata),
282
+ }).then((res) => {
283
+ if (res.success) {
284
+ this.$message({
285
+ message: res.msg,
286
+ type: 'success',
287
+ });
288
+ this.$emit('cancel'); //取消显示
289
+ this.$emit('getData'); //成功后更新数据
290
+ } else {
291
+ this.$message.error(res.msg);
292
+ }
293
+ });
294
+ } else {
295
+ request({
296
+ url: url,
297
+ method: 'post',
298
+ data: querystring.stringify(data),
299
+ }).then((res) => {
300
+ if (res.success) {
301
+ this.$message({
302
+ message: res.msg,
303
+ type: 'success',
304
+ });
305
+ this.$emit('cancel'); //取消显示
306
+ this.$emit('getData'); //成功后更新数据
307
+ } else {
308
+ this.$message.error(res.msg);
309
+ }
310
+ });
311
+ }
312
+ }
313
+ }
314
+ });
315
+ },
316
+ selChange(val, item) {
317
+ //select选中的事件
318
+ console.log(item, '目前选中的值');
319
+ console.log(this.temInput);
320
+ this.$emit('selChange', val, item);
321
+ },
322
+ },
323
+ computed: {
324
+ ruleForm: {
325
+ get() {
326
+ let ruleForm = {};
327
+ // console.log(this.temInput, "ccccccccccccccc");
328
+ this.temInput.forEach((el) => {
329
+ if ('state' in el) {
330
+ el.state && el.name ? this.$set(ruleForm, el.name, el.value) : '';
331
+ } else {
332
+ el.name ? this.$set(ruleForm, el.name, el.value) : '';
333
+ }
334
+ });
335
+ // console.log(ruleForm, "ruleFormruleForm");
336
+ // this.$refs["ruleForm"].resetFields();
337
+ return ruleForm;
338
+ },
339
+ set(val) {
340
+ console.log('为空');
341
+ },
342
+ },
343
+ },
344
+ };
345
+ </script>
346
+ <style>
347
+ /* body {
348
+ overflow: auto !important;
349
+ } */
350
+ .template-input .el-upload-list--picture-card .el-upload-list__item,
351
+ .template-input .el-upload--picture-card {
352
+ width: 100px;
353
+ height: 100px;
354
+ }
355
+ .template-input .el-upload--picture-card {
356
+ line-height: 104px;
357
+ }
358
+ .template-input .el-select {
359
+ width: 220px;
360
+ }
361
+ .template-input .el-form-item__content .el-loading-mask {
362
+ width: 102px;
363
+ height: 102px;
364
+ }
365
+
366
+ .template-input .el-upload-add .el-loading-mask {
367
+ top: -36px;
368
+ right: 72px;
369
+ left: initial;
370
+ }
371
+ .template-input .el-input {
372
+ width: 220px;
373
+ }
374
+ </style>
375
+ <style scoped>
376
+ .auto {
377
+ padding: 20px;
378
+ }
379
+
380
+ .template-title {
381
+ font-weight: normal;
382
+ font-size: 18px;
383
+ padding-left: 10px;
384
+ background: #f8f8f8;
385
+ height: 46px;
386
+ line-height: 46px;
387
+ margin-bottom: 20px;
388
+ }
389
+ .template-title p {
390
+ font-weight: normal;
391
+ font-size: 18px;
392
+ border-left: 3px solid #409eff;
393
+ margin: 13px;
394
+ background: #f8f8f8;
395
+ line-height: 20px;
396
+ padding-left: 6px;
397
+ height: 20px;
398
+ float: left;
399
+ }
400
+ .avatar-uploader-icon {
401
+ font-size: 28px;
402
+ color: #8c939d;
403
+ width: 100px;
404
+ height: 100px;
405
+ line-height: 100px !important;
406
+ text-align: center;
407
+ border: 1px dashed #c0ccda;
408
+ border-radius: 6px;
409
+ background-color: #fbfdff;
410
+ }
411
+ .avatar {
412
+ width: 100px;
413
+ height: 100px;
414
+ display: block;
415
+ }
416
+ .el-upload,
417
+ .el-upload img {
418
+ /* border: 1px dashed #c0ccda; */
419
+ border-radius: 6px;
420
+ }
421
+ </style>