index.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
  4. <el-form-item label="SOP任务" prop="channel" label-width="70px">
  5. <date-range
  6. v-model="selectedMultipleTasks"
  7. :raw-data="channelList"
  8. placeholder="请选择多个任务"
  9. :parentSelectable="true"
  10. :multiple="true"
  11. component-width="300px"
  12. :max-display-tags="3"
  13. :check-strictly="false"
  14. :return-leaf-only="false"
  15. :show-node-detail="true"
  16. @change="handleMultiChange"
  17. @dateRangeChange="dateRangeChange"
  18. ></date-range>
  19. </el-form-item>
  20. <el-form-item>
  21. <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  22. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  23. </el-form-item>
  24. </el-form>
  25. <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
  26. <!-- <el-table-column label="营期名称" align="center" prop="periodName" />-->
  27. <el-table-column label="营期id" align="center" prop="userLogsId" />
  28. <el-table-column label="总人数" align="center" prop="total" />
  29. <el-table-column label="流失人数" align="center" prop="num" />
  30. <!-- <el-table-column label="营期开始时间" align="center" prop="periodStartingTime" />
  31. <el-table-column label="营期结束时间" align="center" prop="periodEndTime" />-->
  32. </el-table>
  33. <pagination
  34. v-show="total>0"
  35. :total="total"
  36. :page.sync="queryParams.pageNum"
  37. :limit.sync="queryParams.pageSize"
  38. @pagination="getList"
  39. />
  40. <!-- 添加或修改用户对话框 -->
  41. <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
  42. <el-form ref="form" :model="form" :rules="rules" label-width="120px">
  43. <el-form-item label="用户头像" prop="avatar">
  44. <el-popover
  45. placement="right"
  46. title=""
  47. trigger="hover"
  48. >
  49. <img slot="reference" :src="form.avatar" width="80">
  50. <img :src="form.avatar" style="max-width: 80px;">
  51. </el-popover>
  52. </el-form-item>
  53. <el-form-item label="会员昵称" prop="nickname">
  54. <el-input v-model="form.nickname" disabled placeholder="请输入用户昵称" />
  55. </el-form-item>
  56. <el-form-item label="手机号码" prop="phone">
  57. <el-input v-model="form.phone" disabled placeholder="请输入手机号码" />
  58. </el-form-item>
  59. <el-form-item label="最后一次登录ip" prop="lastIp">
  60. <el-input v-model="form.lastIp" disabled placeholder="请输入最后一次登录ip" />
  61. </el-form-item>
  62. <!-- <el-form-item label="用户余额" prop="nowMoney">
  63. <el-input v-model="form.nowMoney" disabled placeholder="请输入用户余额" />
  64. </el-form-item> -->
  65. <el-form-item label="积分" prop="integral">
  66. <el-input v-model="form.integral" disabled placeholder="请输入用户剩余积分" />
  67. </el-form-item>
  68. <el-form-item label="用户备注" prop="remark">
  69. <el-input v-model="form.remark" placeholder="请输入用户备注" />
  70. </el-form-item>
  71. <!-- <el-form-item label="状态">
  72. <el-radio-group v-model="form.status">
  73. <el-radio :label="item.dictValue" v-for="item in statusOptions" >{{item.dictLabel}}</el-radio>
  74. </el-radio-group>
  75. </el-form-item> -->
  76. </el-form>
  77. <div slot="footer" class="dialog-footer">
  78. <el-button type="primary" @click="submitForm">确 定</el-button>
  79. <el-button @click="cancel">取 消</el-button>
  80. </div>
  81. </el-dialog>
  82. </div>
  83. </template>
  84. <script>
  85. import { myList,updateUser,getUser,addUser } from "@/api/users/user";
  86. import { shortListCamp } from '@/api/course/userCourseCamp'
  87. import { courseLost, qwCourseLost } from '@/api/course/courseRedPacketLog'
  88. import { getSOPTaskData } from '@/api/system/employeeStats'
  89. import dateRange from '@/components/TreeSelect/dateRange.vue'
  90. import SelectTree from '@/components/TreeSelect/index.vue'
  91. export default {
  92. name: "CourseLostQw",
  93. components: {dateRange,SelectTree},
  94. data() {
  95. return {
  96. statusOptions:[],
  97. selectedMultipleTasks: [],
  98. // 频道列表
  99. channelList: [],
  100. //课程数据
  101. campData: null,
  102. // 遮罩层
  103. loading: false,
  104. // 选中数组
  105. ids: [],
  106. // 非单个禁用
  107. single: true,
  108. // 非多个禁用
  109. multiple: true,
  110. // 显示搜索条件
  111. showSearch: true,
  112. // 总条数
  113. total: 0,
  114. // 用户表格数据
  115. userList: [],
  116. // 弹出层标题
  117. title: "",
  118. // 是否显示弹出层
  119. open: false,
  120. // 查询参数
  121. queryParams: {
  122. pageNum: 1,
  123. pageSize: 10,
  124. periodList: []
  125. },
  126. // 表单参数
  127. form: {},
  128. // 表单校验
  129. rules: {
  130. nowMoney: [
  131. { required: true, message: "用户余额不能为空", trigger: "blur" }
  132. ],
  133. brokeragePrice: [
  134. { required: true, message: "佣金金额不能为空", trigger: "blur" }
  135. ],
  136. integral: [
  137. { required: true, message: "用户剩余积分不能为空", trigger: "blur" }
  138. ],
  139. signNum: [
  140. { required: true, message: "连续签到天数不能为空", trigger: "blur" }
  141. ],
  142. status: [
  143. { required: true, message: "1为正常,0为禁止不能为空", trigger: "blur" }
  144. ],
  145. level: [
  146. { required: true, message: "等级不能为空", trigger: "blur" }
  147. ],
  148. userType: [
  149. { required: true, message: "用户类型不能为空", trigger: "change" }
  150. ],
  151. isPromoter: [
  152. { required: true, message: "是否为推广员不能为空", trigger: "blur" }
  153. ],
  154. addres: [
  155. { required: true, message: "详细地址不能为空", trigger: "blur" }
  156. ],
  157. }
  158. };
  159. },
  160. created() {
  161. getSOPTaskData({}).then(response => {
  162. this.channelList = response.data;
  163. });
  164. this.getDicts("user_status").then((response) => {
  165. this.statusOptions = response.data;
  166. });
  167. //this.getList();
  168. },
  169. methods: {
  170. /** 查询用户列表 */
  171. getList() {
  172. this.loading = true;
  173. if(this.queryParams.periodList===null){
  174. return;
  175. }
  176. qwCourseLost(this.queryParams).then(response => {
  177. this.userList = response.rows;
  178. this.total = response.total;
  179. this.loading = false;
  180. })
  181. },
  182. // 取消按钮
  183. cancel() {
  184. this.open = false;
  185. this.reset();
  186. },
  187. handleMultiChange(e){
  188. },
  189. dateRangeChange(e){
  190. getSOPTaskData({
  191. startDate: e[0],
  192. endDate: e[1]
  193. }).then(response => {
  194. this.channelList = response.data;
  195. });
  196. },
  197. // 表单重置
  198. reset() {
  199. this.form = {
  200. userId: null,
  201. username: null,
  202. password: null,
  203. realName: null,
  204. birthday: null,
  205. idCard: null,
  206. mark: null,
  207. nickname: null,
  208. avatar: null,
  209. phone: null,
  210. createTime: null,
  211. updateTime: null,
  212. lastIp: null,
  213. nowMoney: null,
  214. brokeragePrice: null,
  215. integral: null,
  216. signNum: null,
  217. status: 0,
  218. level: null,
  219. spreadUserId: null,
  220. spreadTime: null,
  221. userType: null,
  222. isPromoter: null,
  223. payCount: null,
  224. spreadCount: null,
  225. addres: null,
  226. wxProfile: null,
  227. isDel: null
  228. };
  229. this.resetForm("form");
  230. },
  231. /** 搜索按钮操作 */
  232. handleQuery() {
  233. this.queryParams.pageNum = 1;
  234. this.getList();
  235. this.queryParams.periodList = this.selectedMultipleTasks;
  236. //this.getStatisticsData();
  237. },
  238. /** 重置按钮操作 */
  239. resetQuery() {
  240. this.resetForm("queryForm");
  241. this.handleQuery();
  242. },
  243. // 多选框选中数据
  244. handleSelectionChange(selection) {
  245. this.ids = selection.map(item => item.userId)
  246. this.single = selection.length!==1
  247. this.multiple = !selection.length
  248. },
  249. /** 新增按钮操作 */
  250. handleAdd() {
  251. this.reset();
  252. this.open = true;
  253. this.title = "添加用户";
  254. },
  255. /** 修改按钮操作 */
  256. handleUpdate(row) {
  257. this.reset();
  258. const userId = row.userId || this.ids
  259. getUser(userId).then(response => {
  260. this.form = response.data;
  261. this.form.status = response.data.status.toString();
  262. this.open = true;
  263. this.title = "修改用户";
  264. });
  265. },
  266. /** 提交按钮 */
  267. submitForm() {
  268. this.$refs["form"].validate(valid => {
  269. if (valid) {
  270. if (this.form.userId != null) {
  271. updateUser(this.form).then(response => {
  272. if (response.code === 200) {
  273. this.msgSuccess("修改成功");
  274. this.open = false;
  275. this.getList();
  276. }
  277. });
  278. } else {
  279. addUser(this.form).then(response => {
  280. if (response.code === 200) {
  281. this.msgSuccess("新增成功");
  282. this.open = false;
  283. this.getList();
  284. }
  285. });
  286. }
  287. }
  288. });
  289. },
  290. /** 删除按钮操作 */
  291. handleDelete(row) {
  292. const userIds = row.userId || this.ids;
  293. this.$confirm('是否确认删除用户编号为"' + userIds + '"的数据项?', "警告", {
  294. confirmButtonText: "确定",
  295. cancelButtonText: "取消",
  296. type: "warning"
  297. }).then(function() {
  298. return delUser(userIds);
  299. }).then(() => {
  300. this.getList();
  301. this.msgSuccess("删除成功");
  302. }).catch(function() {});
  303. },
  304. /** 导出按钮操作 */
  305. handleExport() {
  306. const queryParams = this.queryParams;
  307. this.$confirm('是否确认导出所有用户数据项?', "警告", {
  308. confirmButtonText: "确定",
  309. cancelButtonText: "取消",
  310. type: "warning"
  311. }).then(function() {
  312. return exportUser(queryParams);
  313. }).then(response => {
  314. this.download(response.msg);
  315. }).catch(function() {});
  316. }
  317. }
  318. };
  319. </script>