detail.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. <!-- 活动管理 详情 -->
  2. <template>
  3. <div class="app-container">
  4. <el-form
  5. :model="form"
  6. :rules="rules"
  7. ref="form"
  8. label-width="100px"
  9. :disabled="disabled"
  10. >
  11. <el-form-item label="活动名称:">
  12. <el-input v-model="form.name" placeholder="请输入活动名称" />
  13. </el-form-item>
  14. <el-form-item label="活动类型:">
  15. <el-select
  16. v-model="form.platformName"
  17. placeholder="请选择活动类型"
  18. :disabled="disabledActivity"
  19. >
  20. <el-option
  21. v-for="item in platformNames"
  22. :key="item"
  23. :value="item"
  24. :label="item"
  25. />
  26. </el-select>
  27. </el-form-item>
  28. <el-form-item label="活动图片:" prop="pic">
  29. <Upload listType="picture-card" :url="form.pic" @upload="upload" />
  30. </el-form-item>
  31. <el-form-item label="有效时间:" prop="timeList">
  32. <el-date-picker
  33. type="datetimerange"
  34. v-model="form.timeList"
  35. start-placeholder="开始日期"
  36. end-placeholder="结束日期"
  37. value-format="yyyy-MM-dd HH:mm:ss"
  38. />
  39. </el-form-item>
  40. <el-form-item
  41. label="活动设备:"
  42. style="width: 1000px"
  43. prop="deviceRespList"
  44. >
  45. <el-button
  46. type="primary"
  47. icon="el-icon-plus"
  48. @click="handlePush"
  49. :disabled="disabledActivity"
  50. >添加</el-button
  51. >
  52. <el-table :data="form.deviceRespList">
  53. <el-table-column
  54. label="关联设备"
  55. align="center"
  56. show-overflow-tooltip
  57. >
  58. <template slot-scope="scope">
  59. <el-form-item
  60. :prop="`deviceRespList.${scope.$index}.deviceId`"
  61. :rules="{ required: true, trigger: 'change' }"
  62. >
  63. <span v-if="disabledActivity">{{
  64. devOptions.find((i) => i.value == scope.row.deviceId).label
  65. }}</span>
  66. <el-select
  67. v-else
  68. v-model="scope.row.deviceId"
  69. filterable
  70. placeholder="请选择关联设备"
  71. :disabled="disabledActivity"
  72. >
  73. <el-option
  74. v-for="item in devOptions"
  75. :key="item.value"
  76. :value="item.value"
  77. :label="item.label"
  78. :disabled="item.disabled"
  79. />
  80. </el-select>
  81. </el-form-item>
  82. </template>
  83. </el-table-column>
  84. <!-- <el-table-column
  85. v-if="form.platformName === platformNames[1]"
  86. label="活动权益"
  87. align="center"
  88. >
  89. <template slot-scope="scope">
  90. <el-form-item
  91. :prop="`deviceRespList.${scope.$index}.goodId`"
  92. :rules="{ required: true, trigger: 'change' }"
  93. >
  94. <el-select
  95. v-model="scope.row.goodId"
  96. placeholder="请选择活动权益"
  97. :disabled="scope.row.deviceId == null || disabledActivity"
  98. >
  99. <el-option
  100. v-for="item in form.platformName === platformNames[1]?aaaa[scope.row.deviceId]:serviceTimeOptions"
  101. :key="item.goodId"
  102. :value="item.goodId"
  103. :label="item.goodName"
  104. />
  105. </el-select>
  106. </el-form-item>
  107. </template>
  108. </el-table-column> -->
  109. <el-table-column label="活动权益" align="center">
  110. <template slot-scope="scope">
  111. <el-form-item>
  112. <el-select
  113. v-model="scope.row.goodId"
  114. placeholder="请选择活动权益"
  115. :disabled="disabledActivity"
  116. >
  117. <el-option
  118. v-for="item in form.platformName === platformNames[1]
  119. ? aaaa[scope.row.deviceId]
  120. : serviceTimeOptions"
  121. :key="item.value"
  122. :value="item.value"
  123. :label="item.label"
  124. />
  125. </el-select>
  126. </el-form-item>
  127. {{ scope.row.deviceId }}---{{ aaaa }}--
  128. </template>
  129. </el-table-column>
  130. <el-table-column label="领取数量" align="center">
  131. <template slot-scope="scope">
  132. <el-form-item
  133. :prop="`deviceRespList.${scope.$index}.totalNum`"
  134. :rules="[
  135. {
  136. type: 'number',
  137. required: true,
  138. min:
  139. disabledActivity && num[scope.$index]
  140. ? num[scope.$index]
  141. : 1,
  142. trigger: 'blur',
  143. },
  144. ]"
  145. >
  146. <el-input-number
  147. v-model="scope.row.totalNum"
  148. :controls="false"
  149. :min="1"
  150. placeholder="请输入领取数量"
  151. @change="handleChange($event, scope.$index)"
  152. />
  153. </el-form-item>
  154. </template>
  155. </el-table-column>
  156. <el-table-column label="操作" align="center">
  157. <template slot-scope="scope">
  158. <el-button
  159. type="delete"
  160. @click="getDelete(scope.row.deviceId, scope.$index)"
  161. :disabled="disabledActivity"
  162. >删除</el-button
  163. >
  164. </template>
  165. </el-table-column>
  166. </el-table>
  167. </el-form-item>
  168. </el-form>
  169. <div class="form-btn">
  170. <el-button @click="cancel">取消</el-button>
  171. <el-button v-if="!disabled" type="primary" @click="getSubmit"
  172. >确定</el-button
  173. >
  174. </div>
  175. </div>
  176. </template>
  177. <script>
  178. import { detail, goodList, submit } from "@/api/operation/activity";
  179. import { devMixin, serviceTimeMixin } from "@/mixin/index";
  180. export default {
  181. mixins: [serviceTimeMixin, devMixin],
  182. data() {
  183. return {
  184. aaaa: {},
  185. // 表单
  186. deviceRespListTemp: [],
  187. form: {
  188. deviceRespList: [],
  189. },
  190. platformNames: ["会员赠送", "流量赠送"],
  191. // 除蓝牙设备
  192. types: [2, 4],
  193. // 生效期内禁止修改活动设备
  194. disabledActivity: this.$route.query.activityState == 0 ? true : false,
  195. // 生效期内领取数量禁止下调
  196. num: [],
  197. // 只读
  198. disabled: Boolean(this.$route.query.boolean),
  199. // 校验
  200. rules: {
  201. pic: [
  202. {
  203. required: true,
  204. message: "请上传活动图片",
  205. trigger: "change",
  206. },
  207. ],
  208. timeList: [
  209. {
  210. required: true,
  211. message: "请选择有效时间",
  212. trigger: "change",
  213. },
  214. ],
  215. deviceRespList: [
  216. {
  217. type: "array",
  218. required: true,
  219. message: "请添加活动设备",
  220. trigger: "change",
  221. },
  222. ],
  223. },
  224. };
  225. },
  226. watch: {
  227. "form.deviceRespList": {
  228. handler(val) {
  229. if (this.form.platformName == this.platformNames[1]) {
  230. if (this.deviceRespListTemp.length == val.length) {
  231. for (var i = 0; i < val.length; i++) {
  232. var deviceId = val[i].deviceId;
  233. if (this.deviceRespListTemp[i].deviceId != val[i].deviceId) {
  234. let a = this.aaaa[`${deviceId}`];
  235. if (a == null || a.length == 0) {
  236. this.getGoodList(deviceId);
  237. }
  238. break;
  239. }
  240. }
  241. }
  242. }
  243. this.deviceRespListTemp = JSON.parse(JSON.stringify(val));
  244. // for (let i in this.devOptions) {
  245. // this.devOptions[i].disabled = false;
  246. // }
  247. // // 禁用已关联设备
  248. // val.map((i, index) => {
  249. // if (i.deviceId) {
  250. // let index = this.devOptions.findIndex(
  251. // (j) => j.value === i.deviceId
  252. // );
  253. // this.devOptions[index].disabled = true;
  254. // }
  255. // });
  256. },
  257. deep: true,
  258. },
  259. "form.platformName": {
  260. handler(val) {
  261. for (let i in this.form.deviceRespList) {
  262. if (this.form.deviceRespList[i].goodId != null) {
  263. this.form.deviceRespList[i].goodId = null;
  264. }
  265. }
  266. },
  267. deep: true,
  268. },
  269. // "form.platformName": {
  270. // handler(val) {
  271. // console.log("gasdfasdfasdfaf==22==" + this.form.platformName);
  272. // },
  273. // deep: true,
  274. // },
  275. },
  276. mounted() {
  277. this.getDevList();
  278. if (this.$route.query.id) {
  279. this.getDetail();
  280. }
  281. },
  282. methods: {
  283. // 超级详情
  284. getGoodList(deviceId) {
  285. let platformId = 1;
  286. let param = {
  287. deviceId: deviceId,
  288. platformId: platformId,
  289. };
  290. goodList(param).then((res) => {
  291. if (res.code === 0) {
  292. this.aaaa[`${deviceId}`] = res.data;
  293. console.log(
  294. "gasdfasdfasdfaf==啊啊啊啊=11=" + JSON.stringify(this.aaaa)
  295. );
  296. ///goodId goodName
  297. }
  298. });
  299. },
  300. // 详情
  301. getDetail() {
  302. detail(this.$route.query.id).then((res) => {
  303. if (res.code === 0) {
  304. res.data.platformName =
  305. res.data.platformId === 1
  306. ? this.platformNames[1]
  307. : this.platformNames[0];
  308. this.form = res.data;
  309. res.data.deviceRespList.map((i) => {
  310. this.num.push(i.totalNum);
  311. });
  312. }
  313. });
  314. },
  315. // 上传图片
  316. upload(e) {
  317. this.form.pic = e.file;
  318. },
  319. // 添加
  320. handlePush() {
  321. if (this.form.platformName != null) {
  322. this.form.deviceRespList.push({});
  323. } else {
  324. this.$message.success("请先选择活动类型");
  325. }
  326. },
  327. // 已生效的活动 设备数量不能修改的比之前小
  328. handleChange(e, index) {
  329. if (this.disabledActivity && this.num[index] > e) {
  330. this.$message.error("已生效活动,当前领取数量不可减少");
  331. }
  332. },
  333. // 删除
  334. getDelete(deviceId, index) {
  335. this.form.deviceRespList.splice(index, 1);
  336. this.devOptions.map((i) => {
  337. if (i.value === deviceId) {
  338. i.disabled = false;
  339. }
  340. });
  341. },
  342. // 取消
  343. cancel() {
  344. this.$tab.closeOpenPage("/operation/activity");
  345. },
  346. // 确定
  347. getSubmit() {
  348. this.$refs.form.validate((valid) => {
  349. if (valid) {
  350. submit(this.form).then((res) => {
  351. if (res.code === 0) {
  352. this.$message.success("提交成功!");
  353. this.cancel();
  354. }
  355. });
  356. } else {
  357. return false;
  358. }
  359. });
  360. },
  361. },
  362. };
  363. </script>
  364. <style lang="scss" scoped>
  365. .el-form-item {
  366. width: 500px;
  367. }
  368. .el-table__row {
  369. .el-form-item {
  370. width: 100%;
  371. }
  372. }
  373. </style>