edit.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. <template>
  2. <div>
  3. <el-button size="mini" type="primary" @click="editBtn">编 辑</el-button>
  4. <el-drawer
  5. title="创建促销方案"
  6. :visible.sync="dialogFormVisible"
  7. size="40%"
  8. direction="rtl"
  9. append-to-body
  10. @close="dialogFormVisible = false"
  11. :show-close="false">
  12. <div class="drawer__panel">
  13. <el-row :gutter="20">
  14. <el-form :model="form" :rules="rules" ref="form" label-width="120px" label-position="right" size="mini">
  15. <el-col :span="12">
  16. <el-form-item label="方案名称:" prop="promname">
  17. <el-input v-model="form.promname" placeholder="请输入促销方案名称"></el-input>
  18. </el-form-item>
  19. </el-col>
  20. <el-col :span="12" >
  21. <el-form-item label="促销类型:" prop="type">
  22. <el-select v-model="form.type" placeholder="请选择促销类型" style="width: 100%">
  23. <el-option label="普通促销" value="普通促销"></el-option>
  24. <el-option label="打包促销" value="打包促销"></el-option>
  25. </el-select>
  26. </el-form-item>
  27. </el-col>
  28. <el-col :span="12" >
  29. <el-form-item label="订货账户:" prop="type">
  30. <el-select v-model="form.sa_accountclassid" placeholder="请选择订货账户" style="width: 100%">
  31. <el-option
  32. v-for="item in accountList"
  33. :key="item.sa_accountclassid"
  34. :label="item.accountname"
  35. :value="item.sa_accountclassid">
  36. </el-option>
  37. </el-select>
  38. </el-form-item>
  39. </el-col>
  40. <el-col :span="12">
  41. <el-form-item label="品牌:" prop="sa_brandid">
  42. <el-select v-model="form.sa_brandid" placeholder="请选择品牌" style="width: 100%" @change="brandChange">
  43. <el-option
  44. v-for="item in brandList"
  45. :key="item.sa_brandid"
  46. :label="item.brandname"
  47. :value="item.sa_brandid">
  48. </el-option>
  49. </el-select>
  50. </el-form-item>
  51. </el-col>
  52. <el-col :span="12">
  53. <el-form-item label="领域:" prop="tradefield">
  54. <el-select v-model="form.tradefield" placeholder="请选择领域" style="width: 100%">
  55. <el-option
  56. v-for="item in tradefieldList"
  57. :key="item.rowindex"
  58. :label="item.value"
  59. :value="item.value">
  60. </el-option>
  61. </el-select>
  62. </el-form-item>
  63. </el-col>
  64. <el-col :span="12">
  65. <el-form-item label="起订数量:" prop="orderminqty">
  66. <el-input v-model="form.orderminqty" placeholder="请输入起订数量"></el-input>
  67. </el-form-item>
  68. </el-col>
  69. <el-col :span="12">
  70. <el-form-item label="起订金额:" prop="orderminamount">
  71. <el-input v-model="form.orderminamount" placeholder="请输入起订金额"></el-input>
  72. </el-form-item>
  73. </el-col>
  74. <el-col :span="12">
  75. <el-form-item label="订单增量:" prop="orderaddqty">
  76. <el-input v-model="form.orderaddqty" placeholder="请输入订单增量"></el-input>
  77. </el-form-item>
  78. </el-col>
  79. <el-col :span="12">
  80. <el-form-item label="活动开始时间" prop="begdate">
  81. <el-date-picker
  82. style="width:100%"
  83. v-model="form.begdate"
  84. type="date"
  85. value-format="yyyy-MM-dd"
  86. placeholder="选择开始日期">
  87. </el-date-picker>
  88. </el-form-item>
  89. </el-col>
  90. <el-col :span="12">
  91. <el-form-item label="活动结束时间" prop="begdate">
  92. <el-date-picker
  93. style="width:100%"
  94. v-model="form.enddate"
  95. type="date"
  96. value-format="yyyy-MM-dd"
  97. placeholder="选择结束日期">
  98. </el-date-picker>
  99. </el-form-item>
  100. </el-col>
  101. <el-col :span="24">
  102. <el-form-item label="方案描述:" prop="remarks">
  103. <el-input v-model="form.remarks" type="textarea" rows="5" placeholder="请输入方案描述"></el-input>
  104. </el-form-item>
  105. </el-col>
  106. <el-col :span="24">
  107. <el-form-item label="封面" prop="cover">
  108. <input v-show="false" type="text" v-model="form.cover">
  109. <uploadFile
  110. :one="true"
  111. :multiple="false"
  112. ref="upload"
  113. style="margin-top:10px"
  114. :folderid="folderid"
  115. accept=".JPG,.PNG,.jpg,.png"
  116. type="image"
  117. :bindData="bindData"
  118. @onSuccess="uploadSuccess"
  119. @deleteSuccess="deleteSuccess"
  120. @onChange="coverChange">
  121. </uploadFile>
  122. </el-form-item>
  123. </el-col>
  124. </el-form>
  125. </el-row>
  126. </div>
  127. <div class="fixed__btn__panel">
  128. <el-button size="small" @click="dialogFormVisible = false" class="normal-btn-width">取 消</el-button>
  129. <el-button size="small" type="primary" @click="onSubmit" class="normal-btn-width">确 定</el-button>
  130. </div>
  131. </el-drawer>
  132. </div>
  133. </template>
  134. <script>
  135. import uploadFile from '@/HDrpManagement/promotion/components/upload'
  136. export default {
  137. name: "add",
  138. components:{uploadFile},
  139. props:['data'],
  140. data(){
  141. var checkBegTimer = (rule, value, callback) => {
  142. if (new Date(this.form.enddate).getTime() > new Date(value).getTime()) {
  143. callback()
  144. } {
  145. return callback(new Error('开始时间必须小于结束时间'));
  146. }
  147. }
  148. var checkEndTimer = (rule, value, callback) => {
  149. if (new Date(this.form.begdate).getTime() < new Date(value).getTime()) {
  150. callback()
  151. } {
  152. return callback(new Error('结束时间必须大于开始时间'));
  153. }
  154. }
  155. return {
  156. tradefieldList:[],
  157. brandList:[],
  158. accountList:[],
  159. bindData:{},
  160. dialogFormVisible:false,
  161. folderid:JSON.parse(sessionStorage.getItem('folderid')).appfolderid,
  162. form:{
  163. "sa_promotionid":0, //sat_notice_classid<=0时 为新增
  164. "sa_accountclassid": "",
  165. "sa_brandid":'',
  166. "promname": "",
  167. "remarks": "",
  168. "type": "",
  169. "tradefield": "",
  170. "orderminqty": '',
  171. "orderaddqty": '',
  172. "orderminamount": '',
  173. "begdate": '',
  174. "enddate": "",
  175. "cover":''
  176. },
  177. rules:{
  178. promname:[
  179. { required: true, message: '请输入方案名称', trigger: 'blur'},
  180. ],
  181. sa_brandid:[
  182. { required: true, message: '未选择品牌', trigger: 'change'},
  183. ],
  184. type:[
  185. { required: true, message: '请选择促销类型', trigger: 'change'},
  186. ],
  187. sa_accountclassid:[
  188. { required: true, message: '请选择订货账户', trigger: 'blur'},
  189. ],
  190. orderminqty:[
  191. { required: true, message: '请输入起订量', trigger: 'blur'},
  192. ],
  193. orderaddqty:[
  194. { required: true, message: '请输入订单增量', trigger: 'blur'},
  195. ],
  196. orderminamount:[
  197. { required: true, message: '请输入起订金额', trigger: 'blur'},
  198. ],
  199. begdate:[
  200. { required: true, message: '请选择开始时间', trigger: 'change'},
  201. { validator: checkBegTimer , trigger:'change'}
  202. ],
  203. enddate:[
  204. { required: true, message: '请选择结束时间', trigger: 'change'},
  205. { validator: checkEndTimer , trigger:'change'}
  206. ],
  207. tradefield:[
  208. { required: true, message: '请选择领域', trigger: 'change'},
  209. ],
  210. cover:[
  211. { required: true, message: '请上传封面', trigger: 'change'},
  212. ],
  213. },
  214. }
  215. },
  216. watch: {
  217. dialogFormVisible (val) {
  218. if (!val) {
  219. this.$refs.form.resetFields()
  220. this.$refs.upload.fileLinkList = []
  221. this.$refs.upload.$refs.upload.clearFiles()
  222. }
  223. }
  224. },
  225. methods:{
  226. editBtn () {
  227. this.dialogFormVisible = true
  228. this.form = Object.assign({},this.form,this.data)
  229. this.form.cover = this.form.attinfos
  230. console.log(this.form);
  231. this.$nextTick(() => {
  232. this.$refs.upload.fileLinkList = this.form.attinfos
  233. this.$refs.upload.fileList = this.form.attinfos
  234. })
  235. },
  236. onSubmit(){
  237. console.log(this.form)
  238. this.$refs['form'].validate(async (valid) => {
  239. if (!valid) return false
  240. const res = await this.$api.requested({
  241. "id": "20221230144503",
  242. "version":1,
  243. "content": this.form
  244. })
  245. this.tool.showMessage(res,()=>{
  246. this.$emit('onSuccess')
  247. this.dialogFormVisible = false
  248. this.bindData = {
  249. "ownertable": 'sa_promotion',
  250. "ownerid": res.data.sa_promotionid,
  251. "usetype": 'default',
  252. }
  253. this.$refs['upload'].toUpload(() => {
  254. // this.$emit('onSuccess')
  255. this.dialogFormVisible = false
  256. })
  257. })
  258. })
  259. },
  260. brandChange (val) {
  261. },
  262. coverChange (data) {
  263. this.form.cover = data
  264. },
  265. /* 领域 */
  266. async getTradefield () {
  267. const res = await this.$store.dispatch('optiontypeselect','tradefield')
  268. this.tradefieldList = res.data
  269. console.log(this.tradefieldList,'领域');
  270. },
  271. /* 品牌 */
  272. async getBrand () {
  273. let res = await this.$api.requested({
  274. "id": "20220922085103",
  275. "version":1,
  276. "content": {
  277. "where":{
  278. "condition":""
  279. }
  280. }
  281. })
  282. this.brandList = res.data
  283. console.log(this.brandList,'品牌');
  284. },
  285. /* 账户类型 */
  286. async getAccount () {
  287. let res = await this.$api.requested({
  288.     "id": "20221008134803",
  289.     "version":1,
  290.     "content": {
  291.         "where":{
  292.             "condition":"",
  293.             "isused":1
  294.         }
  295.     }
  296. })
  297. this.accountList = res.data
  298. console.log(this.accountList,'账户');
  299. },
  300. uploadSuccess (data) {
  301. this.$emit('onSuccess')
  302. },
  303. deleteSuccess () {
  304. this.form.cover = ''
  305. }
  306. },
  307. created() {
  308. this.getTradefield()
  309. this.getBrand()
  310. this.getAccount()
  311. this.form.begdate = new Date().getFullYear() + '-' + parseInt(new Date().getMonth() + 1) + '-' + parseInt(new Date().getDate())
  312. },
  313. }
  314. </script>
  315. <style scoped>
  316. </style>