add.html 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503
  1. <link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
  2. <link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
  3. <style>
  4. #detailPage {
  5. border-radius: 10px;
  6. color: #444;
  7. font-weight: 500;
  8. padding: 0px 10px 60px;
  9. position: relative;
  10. }
  11. .el-form-item__label,
  12. .el-form-item__content {
  13. line-height: 32px;
  14. }
  15. .el-form-item {
  16. margin-bottom: 14px;
  17. /* padding-left: 50px; */
  18. }
  19. .title-tip {
  20. color: #999;
  21. line-height: 12px;
  22. font-size: 12px;
  23. font-weight: 400;
  24. margin-top: 10px;
  25. }
  26. .commission-rate,
  27. .level-name {
  28. width: 200px;
  29. }
  30. .upgrade-condition-item {
  31. display: inline-block;
  32. margin-bottom: 10px;
  33. padding: 0 10px;
  34. height: 32px;
  35. line-height: 32px;
  36. text-align: center;
  37. border: 1px solid #e5e5e5;
  38. border-radius: 6px;
  39. margin-right: 14px;
  40. cursor: pointer;
  41. font-size: 12px;
  42. position: relative;
  43. overflow: hidden;
  44. }
  45. .upgrade-type-container {
  46. margin-bottom: 20px;
  47. }
  48. .upgrade-type-title {
  49. margin-right: 20px;
  50. }
  51. .upgrade-condition-item-active {
  52. border-color: #7438D5;
  53. color: #7438D5;
  54. }
  55. .condition-delete {
  56. margin-left: 20px;
  57. cursor: pointer;
  58. display: inline-block;
  59. color: #FE7C76;
  60. font-size: 20px;
  61. }
  62. .goods-header {
  63. background: #f9f9f9;
  64. height: 40px;
  65. line-height: 40px;
  66. }
  67. .goods-item-1 {
  68. width: 280px;
  69. padding: 0 20px;
  70. }
  71. .goods-item-2 {
  72. width: 100px;
  73. padding: 0 20px;
  74. }
  75. .goods-item-3 {
  76. width: 100px;
  77. }
  78. .goods-delete {
  79. cursor: pointer;
  80. color: #FF5959;
  81. }
  82. .goods-image {
  83. width: 40px;
  84. height: 40px;
  85. margin-right: 20px;
  86. border: 1px solid #e6e6e6;
  87. }
  88. .goods-add {
  89. width: 80px;
  90. height: 30px;
  91. border-radius: 4px;
  92. font-size: 12px;
  93. cursor: pointer;
  94. background: #7438D5;
  95. color: #fff;
  96. display: flex;
  97. justify-content: center;
  98. align-items: center;
  99. }
  100. .el-image {
  101. width: 100%;
  102. height: 100%;
  103. }
  104. .image-slot {
  105. display: flex;
  106. justify-content: center;
  107. align-items: center;
  108. height: 100%;
  109. }
  110. .shopro-submit-container {
  111. display: flex;
  112. justify-content: flex-end;
  113. position: fixed;
  114. right: 40px;
  115. bottom: 0px;
  116. height: 60px;
  117. }
  118. .shopro-submit-button {
  119. width: 88px;
  120. height: 36px;
  121. line-height: 36px;
  122. text-align: center;
  123. background: #7438D5;
  124. font-size: 14px;
  125. color: #fff;
  126. cursor: pointer;
  127. border-radius: 5px;
  128. }
  129. .goods-title,
  130. .goods-price {
  131. line-height: 13px;
  132. }
  133. .goods-price {
  134. color: #7438D5;
  135. }
  136. .goods-title {
  137. margin-bottom: 13px;
  138. }
  139. .goods-body-item {
  140. border-top: 1px solid #e6e6e6;
  141. height: 50px;
  142. line-height: 50px;
  143. }
  144. .active-icon {
  145. width: 22px;
  146. height: 22px;
  147. position: absolute;
  148. right: -1px;
  149. top: -1px;
  150. }
  151. .shopro-level-item {
  152. width: 70px;
  153. height: 32px;
  154. line-height: 32px;
  155. border-radius: 4px;
  156. border: 1px solid #e6e6e6;
  157. margin-right: 12px;
  158. text-align: center;
  159. font-size: 13px;
  160. cursor: pointer;
  161. position: relative;
  162. overflow: hidden;
  163. margin-bottom: 10px;
  164. }
  165. .shopro-level-item-active {
  166. border-color: #7438D5;
  167. color: #7438D5;
  168. }
  169. .shopro-level-item-disable {
  170. background: #eee;
  171. border-color: #e6e6e6;
  172. cursor: auto;
  173. }
  174. .el-dialog__body {
  175. padding: 10px 20px;
  176. }
  177. .el-dialog__footer {
  178. padding: 0;
  179. }
  180. .bgimage-add-container {
  181. border: 1px solid #e6e6e6;
  182. width: 80px;
  183. height: 80px;
  184. border-radius: 5px;
  185. }
  186. .bgimage-add {
  187. width: 80px;
  188. height: 80px;
  189. display: flex;
  190. justify-content: center;
  191. align-items: center;
  192. font-size: 30px;
  193. color: #999;
  194. }
  195. .shopro-goods-add-button {
  196. cursor: pointer;
  197. color: #7438D5;
  198. font-size: 13px;
  199. height: 50px;
  200. line-height: 50px;
  201. padding: 0 20px;
  202. }
  203. .shopro-goods-add-button i {
  204. margin-right: 6px;
  205. }
  206. .child-agent-count-add {
  207. width: 80px;
  208. height: 32px;
  209. background: #FFFFFF;
  210. border: 1px solid #7438D5;
  211. border-radius: 4px;
  212. display: flex;
  213. justify-content: center;
  214. align-items: center;
  215. color: #7438D5;
  216. margin-bottom: 14px;
  217. cursor: pointer;
  218. }
  219. .child-agent-count-add i {
  220. margin-right: 6px;
  221. }
  222. .child-agent-count-item {
  223. margin-bottom: 14px;
  224. }
  225. .child-agent-count-select {
  226. width: 150px;
  227. }
  228. .child-agent-count-man {
  229. margin-left: 30px;
  230. }
  231. .child-agent-count-input {
  232. width: 90px;
  233. margin-left: 20px;
  234. }
  235. .level-tip {
  236. margin-bottom: 20px;
  237. border-radius: 5px;
  238. background-color: #F1EBFA;
  239. padding: 16px;
  240. }
  241. .el-input-group__append{
  242. line-height: 30px;
  243. }
  244. [v-cloak] {
  245. display: none
  246. }
  247. </style>
  248. <script src="__CDN__/assets/addons/shopro/libs/vue.js"></script>
  249. <script src="__CDN__/assets/addons/shopro/libs/element/element.js"></script>
  250. <script src="__CDN__/assets/addons/shopro/libs/shopro.js"></script>
  251. <div id="detailPage" v-cloak>
  252. <el-form :model="formData" ref="formData" label-width="168px" v-if="formData">
  253. <div class="level-tip">
  254. 新增或编辑等级后,请及时在分销商品中完善对应的佣金规则
  255. </div>
  256. <div>
  257. <div class="shopro-form-group-title">
  258. <div class="shopro-form-group-title-line"></div>等级佣金比例
  259. </div>
  260. <el-form-item label="等级权重:" prop="level">
  261. <div class="display-flex" style="width: 410px;flex-wrap: wrap;">
  262. <tempalte v-if="optType=='edit'">
  263. <div class="shopro-level-item shopro-level-item-disable" v-if="formData.level!=1">
  264. 一级
  265. </div>
  266. <div class="shopro-level-item shopro-level-item-active" v-else>
  267. <img class="active-icon" src="/assets/addons/shopro/img/goods/active.png">
  268. 一级
  269. </div>
  270. </tempalte>
  271. <tempalte v-if="optType=='add'">
  272. <div class="shopro-level-item shopro-level-item-disable">
  273. 一级
  274. </div>
  275. </tempalte>
  276. <template v-for="(levelItem,levelIndex) in levelList" v-if="levelIndex>0 && formData.level!=1">
  277. <div class="shopro-level-item" v-if="existLevel.includes(Number(levelItem.value))"
  278. :class="[(existLevel.includes(Number(levelItem.value)) && formData.level!=levelItem.value)?'shopro-level-item-disable':'',formData.level==levelItem.value?'shopro-level-item-active':'']">
  279. <img class="active-icon"
  280. v-if="existLevel.includes(Number(levelItem.value)) && formData.level==levelItem.value"
  281. src="/assets/addons/shopro/img/goods/active.png">
  282. {{levelItem.title}}
  283. </div>
  284. <div class="shopro-level-item" v-else
  285. :class="formData.level==levelItem.value?'shopro-level-item-active':''"
  286. @click="selectLevel(levelIndex)">
  287. <img class="active-icon"
  288. v-if="formData.level==levelItem.value?'shopro-level-item-active':''"
  289. src="/assets/addons/shopro/img/goods/active.png">
  290. {{levelItem.title}}
  291. </div>
  292. </template>
  293. </div>
  294. </el-form-item>
  295. <el-form-item label="等级名称:" prop="name">
  296. <div class="level-name">
  297. <el-input v-model="formData.name" placeholder="请输入等级名称" maxlength="6" size="small" show-word-limit>
  298. </el-input>
  299. </div>
  300. </el-form-item>
  301. <el-form-item label="等级徽章:" prop="image">
  302. <div class="bgimage-add-container" @click="bgimageAdd">
  303. <el-image v-if="formData.image" :src="Fast.api.cdnurl(formData.image)" fit="contain">
  304. <div slot="error" class="image-slot">
  305. <i class="el-icon-picture-outline"></i>
  306. </div>
  307. </el-image>
  308. <div class="bgimage-add" v-if="!formData.image">
  309. <i class="el-icon-plus"></i>
  310. </div>
  311. </div>
  312. </el-form-item>
  313. <el-form-item label="一级(自购)佣金比例:" prop="commission_1">
  314. <div class="commission-rate">
  315. <el-input v-model="formData.commission_rules.commission_1" type="number" placeholder="如不填写默认为0"
  316. size="small">
  317. <template slot="append">%</template>
  318. </el-input>
  319. </div>
  320. </el-form-item>
  321. <el-form-item label="二级佣金比例:" prop="commission_2">
  322. <div class="commission-rate">
  323. <el-input v-model="formData.commission_rules.commission_2" type="number" placeholder="如不填写默认为0"
  324. size="small">
  325. <template slot="append">%</template>
  326. </el-input>
  327. </div>
  328. </el-form-item>
  329. <el-form-item label="三级佣金比例:" prop="commission_3">
  330. <div class="commission-rate">
  331. <el-input v-model="formData.commission_rules.commission_3" type="number" placeholder="如不填写默认为0"
  332. size="small">
  333. <template slot="append">%</template>
  334. </el-input>
  335. </div>
  336. </el-form-item>
  337. </div>
  338. <div v-if="formData.level!=1">
  339. <div class="shopro-form-group-title">
  340. <div class="shopro-form-group-title-line"></div>添加升级条件
  341. </div>
  342. <el-form-item label="升级方式:" prop="upgrade_type">
  343. <div>
  344. <el-radio-group v-model="formData.upgrade_type">
  345. <el-radio :label="0">满足以下任意条件</el-radio>
  346. <el-radio :label="1">满足以下全部条件</el-radio>
  347. </el-radio-group>
  348. </div>
  349. </el-form-item>
  350. <el-form-item>
  351. <div>
  352. <div>
  353. <div class="upgrade-condition-item" :class="upgrade.selected?'upgrade-condition-item-active':''"
  354. v-for="(upgrade,upgradeIndex) in upgradeCondition" v-if="upgradeIndex<4" @click="selectCondition(upgradeIndex)">
  355. <img class="active-icon" v-if="upgrade.selected"
  356. src="/assets/addons/shopro/img/goods/active.png">
  357. <span>{{upgrade.title}}</span>
  358. </div>
  359. </div>
  360. <div>
  361. <div class="upgrade-condition-item" :class="upgrade.selected?'upgrade-condition-item-active':''"
  362. v-for="(upgrade,upgradeIndex) in upgradeCondition" v-if="upgradeIndex>3 && upgradeIndex<8" @click="selectCondition(upgradeIndex)">
  363. <img class="active-icon" v-if="upgrade.selected"
  364. src="/assets/addons/shopro/img/goods/active.png">
  365. <span v-if="upgradeIndex!=4">{{upgrade.title}}</span>
  366. <el-popover placement="bottom" trigger="hover"
  367. content="包含直推分销金额和内购分销金额">
  368. <span v-if="upgradeIndex==4" slot="reference">{{upgrade.title}}</span>
  369. </el-popover>
  370. </div>
  371. </div>
  372. <div>
  373. <div class="upgrade-condition-item" :class="upgrade.selected?'upgrade-condition-item-active':''"
  374. v-for="(upgrade,upgradeIndex) in upgradeCondition" v-if="upgradeIndex>7 && upgradeIndex<12" @click="selectCondition(upgradeIndex)">
  375. <img class="active-icon" v-if="upgrade.selected"
  376. src="/assets/addons/shopro/img/goods/active.png">
  377. <span v-if="upgradeIndex!=8">{{upgrade.title}}</span>
  378. <el-popover placement="bottom" trigger="hover"
  379. content="包含直推分销订单和内购分销订单">
  380. <span v-if="upgradeIndex==8" slot="reference">{{upgrade.title}}</span>
  381. </el-popover>
  382. </div>
  383. </div>
  384. <div>
  385. <div class="upgrade-condition-item" :class="upgrade.selected?'upgrade-condition-item-active':''"
  386. v-for="(upgrade,upgradeIndex) in upgradeCondition" v-if="upgradeIndex>11 && upgradeIndex<15" @click="selectCondition(upgradeIndex)">
  387. <img class="active-icon" v-if="upgrade.selected"
  388. src="/assets/addons/shopro/img/goods/active.png">
  389. <span>{{upgrade.title}}</span>
  390. </div>
  391. </div>
  392. <div>
  393. <div class="upgrade-condition-item" :class="upgrade.selected?'upgrade-condition-item-active':''"
  394. v-for="(upgrade,upgradeIndex) in upgradeCondition" v-if="upgradeIndex>14" @click="selectCondition(upgradeIndex)">
  395. <img class="active-icon" v-if="upgrade.selected"
  396. src="/assets/addons/shopro/img/goods/active.png">
  397. <span>{{upgrade.title}}</span>
  398. </div>
  399. </div>
  400. </div>
  401. </el-form-item>
  402. <el-form-item :label="upgrade.title+':'" v-if="upgrade.selected"
  403. v-for="(upgrade,uindex) in upgradeCondition" :prop="upgrade.key">
  404. <div class="display-flex"
  405. v-if="upgrade.key!='child_agent_level' && upgrade.key!='child_agent_level_1'">
  406. <div class="commission-rate">
  407. <el-input v-model="upgrade.value" type="number" size="small">
  408. <template slot="append"
  409. v-if="upgrade.key=='total_consume' || upgrade.key=='child_order_money' || upgrade.key=='child_order_money_1' || upgrade.key=='child_order_money_2' || upgrade.key=='order_money'">元</template>
  410. <template slot="append"
  411. v-if="upgrade.key=='child_agent_count' || upgrade.key=='child_agent_count_1' || upgrade.key=='child_agent_count_2' || upgrade.key=='child_user_count' || upgrade.key=='child_user_count_1' || upgrade.key=='child_user_count_2'">人</template>
  412. <template slot="append"
  413. v-if="upgrade.key=='order_count' || upgrade.key=='child_order_count_1' || upgrade.key=='child_order_count_2' || upgrade.key=='child_order_count'">单</template>
  414. </el-input>
  415. </div>
  416. <i class="condition-delete el-icon-circle-close" @click="conditionDelete(uindex)"></i>
  417. </div>
  418. <div
  419. v-if="upgrade.key=='child_agent_level' || upgrade.key=='child_agent_level_1'">
  420. <div>
  421. <div class="display-flex child-agent-count-item" v-for="(countItem,cindex) in upgrade.value">
  422. <div class="child-agent-count-select">
  423. <el-select v-model="countItem.level" placeholder="请选择分销商等级" no-data-text="等级已选择完毕" size="small">
  424. <el-option v-for="item in levelOptions" :key="item.level"
  425. :label="item.name+'(等级'+item.level+')'" :value="item.level"
  426. v-if="Number(item.level)<=Number(formData.level) && Number(item.level)!=Number(editId)">
  427. </el-option>
  428. </el-select>
  429. </div>
  430. <div class="child-agent-count-man">满</div>
  431. <div class="child-agent-count-input">
  432. <el-input v-model="countItem.count" type="number" size="small">
  433. <template slot="append">人</template>
  434. </el-input>
  435. </div>
  436. <i class="condition-delete el-icon-circle-close" @click="childAgentCountDelete(uindex,cindex)"></i>
  437. </div>
  438. </div>
  439. <div class="child-agent-count-add" @click="childAgentCountAdd(uindex)"
  440. v-if="!formData.level || upgrade.value.length<selectLevelOptionsLength">
  441. <i class="el-icon-plus"></i>添加</div>
  442. </div>
  443. </el-form-item>
  444. </div>
  445. </el-form>
  446. <div class="shopro-submit-container">
  447. <div class="shopro-submit-button" @click="formSubmit('formData')">确定</div>
  448. </div>
  449. <el-dialog title="提示" :visible.sync="deleteDialog" width="400" :before-close="deleteDialogClose">
  450. <div class="display-flex" style="justify-content: space-between;">
  451. <div>分销商移入其他等级</div>
  452. <el-select v-model="moveLevel" placeholder="请选择" size="small">
  453. <el-option v-for="item in levelOptions" :key="item.value" :label="item.label" :value="item.value">
  454. </el-option>
  455. </el-select>
  456. </div>
  457. <span slot="footer" class="dialog-footer">
  458. <el-button size="small" type="primary" @click="deleteDialogClose('define')">确 定</el-button>
  459. </span>
  460. </el-dialog>
  461. </div>