index.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693
  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="会员昵称" prop="nickname">
  5. <el-input
  6. v-model="queryParams.nickname"
  7. placeholder="请输入会员昵称"
  8. clearable
  9. size="small"
  10. @keyup.enter.native="handleQuery"
  11. />
  12. </el-form-item>
  13. <el-form-item label="手机号码" prop="phone">
  14. <el-input
  15. v-model="queryParams.phone"
  16. placeholder="请输入手机号码"
  17. clearable
  18. size="small"
  19. @keyup.enter.native="handleQuery"
  20. />
  21. </el-form-item>
  22. <el-form-item label="注册时间" prop="createTimeRange">
  23. <el-date-picker clearable size="small" style="width: 340px"
  24. v-model="dateRange"
  25. type="daterange"
  26. value-format="yyyy-MM-dd"
  27. range-separator="至"
  28. start-placeholder="开始日期"
  29. end-placeholder="结束日期"
  30. @change="handleDateRangeChange">
  31. </el-date-picker>
  32. </el-form-item>
  33. <!-- <el-form-item label="推线编码" prop="registerCode">-->
  34. <!-- <el-input-->
  35. <!-- v-model="queryParams.registerCode"-->
  36. <!-- placeholder="请输入推线编码"-->
  37. <!-- clearable-->
  38. <!-- size="small"-->
  39. <!-- @keyup.enter.native="handleQuery"-->
  40. <!-- />-->
  41. <!-- </el-form-item>-->
  42. <el-form-item label="所属销售" prop="companyUserNickName">
  43. <el-input
  44. v-model="queryParams.companyUserNickName"
  45. placeholder="请输入所属销售"
  46. clearable
  47. size="small"
  48. @keyup.enter.native="handleQuery"
  49. />
  50. </el-form-item>
  51. <el-form-item label="状态" prop="status">
  52. <el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small" >
  53. <el-option
  54. v-for="item in statusOptions"
  55. :key="item.dictValue"
  56. :label="item.dictLabel"
  57. :value="item.dictValue"
  58. />
  59. </el-select>
  60. </el-form-item>
  61. <!-- <el-form-item label="会员等级" prop="status">-->
  62. <!-- <el-select v-model="queryParams.level" placeholder="请选择会员等级" clearable size="small" >-->
  63. <!-- <el-option-->
  64. <!-- v-for="item in userLevelOptions"-->
  65. <!-- :key="item.dictValue"-->
  66. <!-- :label="item.dictLabel"-->
  67. <!-- :value="item.dictValue"-->
  68. <!-- />-->
  69. <!-- </el-select>-->
  70. <!-- </el-form-item>-->
  71. <!-- <el-form-item label="推广员" prop="isPromoter">-->
  72. <!-- <el-select v-model="queryParams.isPromoter" placeholder="请选择" clearable size="small" >-->
  73. <!-- <el-option-->
  74. <!-- v-for="item in userIsPromoterOptions"-->
  75. <!-- :key="item.dictValue"-->
  76. <!-- :label="item.dictLabel"-->
  77. <!-- :value="item.dictValue"-->
  78. <!-- />-->
  79. <!-- </el-select>-->
  80. <!-- </el-form-item>-->
  81. <el-form-item>
  82. <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  83. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  84. </el-form-item>
  85. </el-form>
  86. <el-row :gutter="10" class="mb8">
  87. <el-col :span="1.5">
  88. <el-button
  89. type="primary"
  90. icon="el-icon-user"
  91. size="mini"
  92. @click="handleChangeCompanyUser"
  93. :disabled="multiple"
  94. v-hasPermi="['company:companyUser:change']"
  95. >更换会员归属</el-button>
  96. </el-col>
  97. <el-col :span="1.5">
  98. <el-button
  99. type="warning"
  100. icon="el-icon-download"
  101. size="mini"
  102. @click="handleExport"
  103. v-hasPermi="['store:user:export']"
  104. >导出</el-button>
  105. </el-col>
  106. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  107. </el-row>
  108. <el-table height="500" border v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
  109. <el-table-column type="selection" width="55" align="center" />
  110. <el-table-column label="ID" align="center" prop="userId" />
  111. <el-table-column label="会员昵称" align="center" prop="nickname" />
  112. <el-table-column label="会员头像" align="center" width="80">
  113. <template slot-scope="scope">
  114. <el-popover
  115. placement="right"
  116. title=""
  117. trigger="hover"
  118. >
  119. <img slot="reference" :src="scope.row.avatar" width="50" >
  120. <img :src="scope.row.avatar" style="max-width: 120px;">
  121. </el-popover>
  122. </template>
  123. </el-table-column>
  124. <el-table-column label="手机号码" align="center" prop="phone" />
  125. <el-table-column label="用户余额" align="center" prop="nowMoney" />
  126. <!-- <el-table-column label="推广佣金" align="center" prop="brokeragePrice" />-->
  127. <el-table-column label="积分" align="center" prop="integral" />
  128. <el-table-column label="会员注册时间" align="center" prop="createTime" />
  129. <!-- <el-table-column label="累计消费金额" align="center" prop="totalAmount" />-->
  130. <!-- <el-table-column label="上次消费时间" align="center" prop="lastBuyTime" />-->
  131. <!-- <el-table-column label="上次消费金额(元)" align="center" prop="number" />-->
  132. <!-- <el-table-column label="会员等级" align="center" prop="level" >-->
  133. <!-- <template slot-scope="scope">-->
  134. <!-- <el-tag prop="status" v-for="(item, index) in userLevelOptions" v-if="scope.row.level==item.dictValue">{{item.dictLabel}}</el-tag>-->
  135. <!-- </template>-->
  136. <!-- </el-table-column>-->
  137. <!-- <el-table-column label="是否允许下单" align="center" prop="isShow" >-->
  138. <!-- <template slot-scope="scope">-->
  139. <!-- <el-tag prop="isShow" v-for="(item, index) in isShowOptions" v-if="scope.row.isShow==item.dictValue">{{item.dictLabel}}</el-tag>-->
  140. <!-- </template>-->
  141. <!-- </el-table-column>-->
  142. <!-- <el-table-column label="推广员" align="center" prop="isPromoter" >-->
  143. <!-- <template slot-scope="scope">-->
  144. <!-- <el-tag prop="status" v-for="(item, index) in userIsPromoterOptions" v-if="scope.row.isPromoter==item.dictValue">{{item.dictLabel}}</el-tag>-->
  145. <!-- </template>-->
  146. <!-- </el-table-column>-->
  147. <el-table-column label="状态" align="center" prop="status" >
  148. <template slot-scope="scope">
  149. <el-tag prop="status" v-for="(item, index) in statusOptions" v-if="scope.row.status==item.dictValue">{{item.dictLabel}}</el-tag>
  150. </template>
  151. </el-table-column>
  152. <!-- <el-table-column label="创建时间" align="center" prop="createTime" />-->
  153. <!-- <el-table-column label="累计佣金" align="center" prop="registerDate" />-->
  154. <!-- <el-table-column label="可提现佣金" align="center" prop="registerCode" />-->
  155. <!-- <el-table-column label="冻结佣金" align="center" prop="source" />-->
  156. <!-- <el-table-column label="已提现佣金" align="center" prop="remark" />-->
  157. <el-table-column label="看课数量" align="center" prop="watchCourseCount" />
  158. <el-table-column label="参与营期数" align="center" prop="partCourseCount" />
  159. <el-table-column label="所属销售" align="center" prop="companyUserNickName" />
  160. <el-table-column label="最后看课时间" align="center" prop="lastWatchDate" width="160">
  161. <template slot-scope="scope">
  162. <span>{{ parseTime(scope.row.lastWatchDate) }}</span>
  163. </template>
  164. </el-table-column>
  165. <el-table-column label="操作" align="center" fixed="right" width="150px" class-name="small-padding fixed-width">
  166. <template slot-scope="scope">
  167. <el-button
  168. size="mini"
  169. type="text"
  170. icon="el-icon-edit"
  171. @click="handleUpdate(scope.row)"
  172. v-hasPermi="['store:user:edit']"
  173. >修改</el-button>
  174. <el-button
  175. size="mini"
  176. type="text"
  177. @click="handleShow(scope.row)"
  178. v-hasPermi="['store:user:query']"
  179. >查看</el-button>
  180. <el-button
  181. size="mini"
  182. type="text"
  183. icon="el-icon-delete"
  184. @click="handleDelete(scope.row)"
  185. v-hasPermi="['store:user:remove']"
  186. >删除</el-button>
  187. </template>
  188. </el-table-column>
  189. </el-table>
  190. <pagination
  191. v-show="total>0"
  192. :total="total"
  193. :page.sync="queryParams.pageNum"
  194. :limit.sync="queryParams.pageSize"
  195. @pagination="getList"
  196. />
  197. <!-- 添加或修改用户对话框 -->
  198. <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
  199. <el-form ref="form" :model="form" :rules="rules" label-width="120px">
  200. <el-form-item label="会员头像" prop="avatar">
  201. <el-popover
  202. placement="right"
  203. title=""
  204. trigger="hover"
  205. >
  206. <img slot="reference" :src="form.avatar" width="80">
  207. <img :src="form.avatar" style="max-width: 80px;">
  208. </el-popover>
  209. </el-form-item>
  210. <el-form-item label="会员昵称" prop="nickname">
  211. <el-input v-model="form.nickname" disabled placeholder="请输入用户昵称" />
  212. </el-form-item>
  213. <el-form-item label="手机号码" prop="phone">
  214. <el-input v-model="form.phone" disabled placeholder="请输入手机号码" />
  215. </el-form-item>
  216. <el-form-item label="最后一次登录ip" prop="lastIp">
  217. <el-input v-model="form.lastIp" disabled placeholder="请输入最后一次登录ip" />
  218. </el-form-item>
  219. <!-- <el-form-item label="用户余额" prop="nowMoney">
  220. <el-input v-model="form.nowMoney" disabled placeholder="请输入用户余额" />
  221. </el-form-item> -->
  222. <!-- <el-form-item label="积分" prop="integral">
  223. <el-input v-model="form.integral" disabled placeholder="请输入用户积分" />
  224. </el-form-item> -->
  225. <el-form-item label="进线日期" prop="registerDate">
  226. <el-date-picker clearable size="small"
  227. v-model="form.registerDate"
  228. type="date"
  229. value-format="yyyy-MM-dd"
  230. placeholder="选择进线日期">
  231. </el-date-picker>
  232. </el-form-item>
  233. <el-form-item label="推线编码" prop="registerCode">
  234. <el-input v-model="form.registerCode" placeholder="请输入推线编码" />
  235. </el-form-item>
  236. <el-form-item label="渠道来源" prop="source">
  237. <el-input v-model="form.source" placeholder="请输入渠道来源" />
  238. </el-form-item>
  239. <el-form-item label="会员等级" prop="level">
  240. <el-select style="width: 200px" v-model="form.level" placeholder="请选择会员等级" clearable size="small" >
  241. <el-option
  242. v-for="item in userLevelOptions"
  243. :key="item.dictValue"
  244. :label="item.dictLabel"
  245. :value="item.dictValue"
  246. />
  247. </el-select>
  248. </el-form-item>
  249. <el-form-item label="是否为推广员" prop="isPromoter">
  250. <el-select style="width: 200px" v-model="form.isPromoter" placeholder="请选择" clearable size="small" >
  251. <el-option
  252. v-for="item in userIsPromoterOptions"
  253. :key="item.dictValue"
  254. :label="item.dictLabel"
  255. :value="item.dictValue"
  256. />
  257. </el-select>
  258. </el-form-item>
  259. <el-form-item label="状态" prop="level">
  260. <el-radio-group v-model="form.status">
  261. <el-radio :label="item.dictValue" v-for="item in statusOptions" >{{item.dictLabel}}</el-radio>
  262. </el-radio-group>
  263. </el-form-item>
  264. <el-form-item label="是否展示" prop="isShow">
  265. <el-radio-group v-model="form.isShow">
  266. <el-radio :label="item.dictValue" v-for="item in isShowOptions" >{{item.dictLabel}}</el-radio>
  267. </el-radio-group>
  268. </el-form-item>
  269. <el-form-item label="用户备注" prop="remark">
  270. <el-input v-model="form.remark" placeholder="请输入用户备注" />
  271. </el-form-item>
  272. </el-form>
  273. <div slot="footer" class="dialog-footer">
  274. <el-button type="primary" @click="submitForm">确 定</el-button>
  275. <el-button @click="cancel">取 消</el-button>
  276. </div>
  277. </el-dialog>
  278. <el-drawer size="75%" :title="show.title" :visible.sync="show.open">
  279. <store-user-details ref="storeUserDetails"></store-user-details>
  280. </el-drawer>
  281. <!-- 更换会员归属对话框 -->
  282. <el-dialog title="更换会员归属" :visible.sync="changeCompanyUserOpen" width="500px" append-to-body>
  283. <el-form ref="changeCompanyUserForm" :model="changeCompanyUserForm" :rules="changeCompanyUserRules" label-width="100px">
  284. <el-form-item label="选择公司" prop="companyId">
  285. <el-select v-model="changeCompanyUserForm.companyId" placeholder="请选择公司" style="width: 100%" @change="handleCompanyChange">
  286. <el-option
  287. v-for="item in companyOptions"
  288. :key="item.companyId"
  289. :label="item.companyName"
  290. :value="item.companyId"
  291. />
  292. </el-select>
  293. </el-form-item>
  294. <el-form-item label="选择销售" prop="companyUserId">
  295. <el-select v-model="changeCompanyUserForm.companyUserId" placeholder="请选择销售" style="width: 100%" @change="handleCompanyUserChange">
  296. <el-option
  297. v-for="item in companyUserOptions"
  298. :key="item.userId"
  299. :label="item.nickName + '_' + item.userName"
  300. :value="item.userId"
  301. />
  302. </el-select>
  303. </el-form-item>
  304. </el-form>
  305. <div slot="footer" class="dialog-footer">
  306. <el-button type="primary" @click="submitChangeCompanyUserForm">确 定</el-button>
  307. <el-button @click="cancelChangeCompanyUser">取 消</el-button>
  308. </div>
  309. </el-dialog>
  310. </div>
  311. </template>
  312. <script>
  313. import { listUser, getUser, delUser, addUser, updateUser, exportUser } from "@/api/store/user";
  314. import { getCompanyUserList, changeCompanyUser, getCompanyList } from '@/api/company/companyUser';
  315. import storeUserDetails from './components/storeUserDetails.vue';
  316. export default {
  317. components: { storeUserDetails },
  318. name: "User",
  319. data() {
  320. return {
  321. userIsPromoterOptions:[],
  322. userLevelOptions:[],
  323. statusOptions:[],
  324. isShowOptions:[],
  325. // 遮罩层
  326. loading: true,
  327. // 选中数组
  328. ids: [],
  329. // 非单个禁用
  330. single: true,
  331. // 非多个禁用
  332. multiple: true,
  333. // 显示搜索条件
  334. showSearch: true,
  335. // 总条数
  336. total: 0,
  337. show:{
  338. title:"会员详情",
  339. open:false,
  340. },
  341. // 用户表格数据
  342. userList: [],
  343. // 弹出层标题
  344. title: "",
  345. // 是否显示弹出层
  346. open: false,
  347. // 日期范围
  348. dateRange: [],
  349. // 查询参数
  350. queryParams: {
  351. pageNum: 1,
  352. pageSize: 10,
  353. username: null,
  354. password: null,
  355. realName: null,
  356. birthday: null,
  357. idCard: null,
  358. mark: null,
  359. nickname: null,
  360. avatar: null,
  361. phone: null,
  362. lastIp: null,
  363. nowMoney: null,
  364. brokeragePrice: null,
  365. integral: null,
  366. signNum: null,
  367. status: null,
  368. level: null,
  369. spreadUserId: null,
  370. spreadTime: null,
  371. userType: null,
  372. isPromoter: null,
  373. payCount: null,
  374. spreadCount: null,
  375. addres: null,
  376. wxProfile: null,
  377. isDel: null,
  378. startCreateTime: null,
  379. endCreateTime: null,
  380. companyUserNickName: null
  381. },
  382. // 表单参数
  383. form: {},
  384. // 表单校验
  385. rules: {
  386. status: [
  387. { required: true, message: "状态不能为空", trigger: "blur" }
  388. ],
  389. level: [
  390. { required: true, message: "等级不能为空", trigger: "blur" }
  391. ],
  392. },
  393. // 更换会员归属对话框
  394. changeCompanyUserOpen: false,
  395. // 更换会员归属表单
  396. changeCompanyUserForm: {
  397. companyId: null,
  398. companyUserId: null,
  399. userIds: []
  400. },
  401. // 更换会员归属表单校验
  402. changeCompanyUserRules: {
  403. companyId: [
  404. { required: true, message: '请选择公司', trigger: 'change' }
  405. ],
  406. companyUserId: [
  407. { required: true, message: '请选择销售', trigger: 'change' }
  408. ]
  409. },
  410. // 销售选项
  411. companyUserOptions: [],
  412. companyOptions: []
  413. };
  414. },
  415. created() {
  416. this.getDicts("user_status").then((response) => {
  417. this.statusOptions = response.data;
  418. });
  419. this.getDicts("user_level").then((response) => {
  420. this.userLevelOptions = response.data;
  421. });
  422. this.getDicts("sys_company_or").then((response) => {
  423. this.isShowOptions = response.data;
  424. });
  425. this.getDicts("user_is_promoter").then((response) => {
  426. this.userIsPromoterOptions = response.data;
  427. });
  428. this.getList();
  429. },
  430. methods: {
  431. /** 查询用户列表 */
  432. getList() {
  433. this.loading = true;
  434. listUser(this.queryParams).then(response => {
  435. this.userList = response.rows;
  436. this.total = response.total;
  437. this.loading = false;
  438. });
  439. },
  440. // 取消按钮
  441. cancel() {
  442. this.open = false;
  443. this.reset();
  444. },
  445. // 表单重置
  446. reset() {
  447. this.form = {
  448. userId: null,
  449. username: null,
  450. password: null,
  451. realName: null,
  452. birthday: null,
  453. idCard: null,
  454. mark: null,
  455. nickname: null,
  456. avatar: null,
  457. phone: null,
  458. createTime: null,
  459. updateTime: null,
  460. lastIp: null,
  461. nowMoney: null,
  462. brokeragePrice: null,
  463. integral: null,
  464. signNum: null,
  465. status: 0,
  466. level: 0,
  467. spreadUserId: null,
  468. spreadTime: null,
  469. userType: null,
  470. isPromoter: null,
  471. payCount: null,
  472. spreadCount: null,
  473. addres: null,
  474. wxProfile: null,
  475. isDel: null,
  476. isShow: null
  477. };
  478. this.resetForm("form");
  479. },
  480. /** 搜索按钮操作 */
  481. handleQuery() {
  482. this.queryParams.pageNum = 1;
  483. this.getList();
  484. },
  485. /** 重置按钮操作 */
  486. resetQuery() {
  487. this.dateRange = [];
  488. this.resetForm("queryForm");
  489. this.queryParams.companyUserNickName = null;
  490. this.handleQuery();
  491. },
  492. /** 处理日期范围变化 */
  493. handleDateRangeChange(dates) {
  494. if (dates) {
  495. this.queryParams.startCreateTime = dates[0];
  496. this.queryParams.endCreateTime = dates[1];
  497. } else {
  498. this.queryParams.startCreateTime = null;
  499. this.queryParams.endCreateTime = null;
  500. }
  501. },
  502. // 多选框选中数据
  503. handleSelectionChange(selection) {
  504. this.ids = selection.map(item => item.userId)
  505. this.single = selection.length!==1
  506. this.multiple = !selection.length
  507. },
  508. /** 新增按钮操作 */
  509. handleAdd() {
  510. this.reset();
  511. this.open = true;
  512. this.title = "添加用户";
  513. },
  514. /** 修改按钮操作 */
  515. handleUpdate(row) {
  516. this.reset();
  517. const userId = row.userId || this.ids
  518. getUser(userId).then(response => {
  519. this.form = response.data;
  520. this.form.status = response.data.status.toString();
  521. this.form.isShow = response.data.isShow.toString();
  522. this.form.level = response.data.level.toString();
  523. this.form.isPromoter = response.data.isPromoter.toString();
  524. this.open = true;
  525. this.title = "修改用户";
  526. });
  527. },
  528. /** 提交按钮 */
  529. submitForm() {
  530. this.$refs["form"].validate(valid => {
  531. if (valid) {
  532. if (this.form.userId != null) {
  533. updateUser(this.form).then(response => {
  534. if (response.code === 200) {
  535. this.msgSuccess("修改成功");
  536. this.open = false;
  537. this.getList();
  538. }
  539. });
  540. } else {
  541. addUser(this.form).then(response => {
  542. if (response.code === 200) {
  543. this.msgSuccess("新增成功");
  544. this.open = false;
  545. this.getList();
  546. }
  547. });
  548. }
  549. }
  550. });
  551. },
  552. /** 删除按钮操作 */
  553. handleDelete(row) {
  554. const userIds = row.userId || this.ids;
  555. this.$confirm('是否确认删除用户编号为"' + userIds + '"的数据项?', "警告", {
  556. confirmButtonText: "确定",
  557. cancelButtonText: "取消",
  558. type: "warning"
  559. }).then(function() {
  560. return delUser(userIds);
  561. }).then(() => {
  562. this.getList();
  563. this.msgSuccess("删除成功");
  564. }).catch(function() {});
  565. },
  566. /** 导出按钮操作 */
  567. handleExport() {
  568. const queryParams = this.queryParams;
  569. this.$confirm('是否确认导出所有用户数据项?', "警告", {
  570. confirmButtonText: "确定",
  571. cancelButtonText: "取消",
  572. type: "warning"
  573. }).then(function() {
  574. return exportUser(queryParams);
  575. }).then(response => {
  576. this.download(response.msg);
  577. }).catch(function() {});
  578. }
  579. ,handleShow(row){
  580. var that=this;
  581. that.show.open=true;
  582. setTimeout(() => {
  583. that.$refs.storeUserDetails.getDetails(row.userId);
  584. }, 200);
  585. },
  586. /** 更换会员归属按钮操作 */
  587. handleChangeCompanyUser() {
  588. // 获取公司下拉列表
  589. getCompanyList().then(response => {
  590. if (response.code === 200) {
  591. this.companyOptions = response.data;
  592. // 重置表单和销售列表
  593. this.resetCompanyUserForm();
  594. this.companyUserOptions = [];
  595. this.changeCompanyUserOpen = true;
  596. } else {
  597. this.$message.error(response.msg || '获取公司列表失败');
  598. }
  599. }).catch(() => {
  600. this.$message.error('获取公司列表失败');
  601. });
  602. },
  603. /** 销售选择变化 */
  604. handleCompanyUserChange(userId) {
  605. if (!this.changeCompanyUserForm.companyId) {
  606. this.$message.warning('请先选择公司');
  607. this.changeCompanyUserForm.companyUserId = null;
  608. return;
  609. }
  610. },
  611. /** 重置更换会员归属表单 */
  612. resetCompanyUserForm() {
  613. this.changeCompanyUserForm = {
  614. companyId: null,
  615. companyUserId: null,
  616. userIds: []
  617. };
  618. this.resetForm("changeCompanyUserForm");
  619. },
  620. handleCompanyChange(companyId) {
  621. // 清空已选择的销售
  622. this.changeCompanyUserForm.companyUserId = null;
  623. // 根据公司ID获取对应的销售列表
  624. if (companyId) {
  625. getCompanyUserList({ companyId: companyId }).then(response => {
  626. if (response.code === 200) {
  627. this.companyUserOptions = response.data;
  628. } else {
  629. this.$message.error(response.msg || '获取销售列表失败');
  630. this.companyUserOptions = [];
  631. }
  632. }).catch(() => {
  633. this.$message.error('获取销售列表失败');
  634. this.companyUserOptions = [];
  635. });
  636. } else {
  637. this.companyUserOptions = [];
  638. }
  639. },
  640. /** 取消更换会员归属 */
  641. cancelChangeCompanyUser() {
  642. this.changeCompanyUserOpen = false;
  643. this.resetCompanyUserForm();
  644. },
  645. /** 提交更换会员归属 */
  646. submitChangeCompanyUserForm() {
  647. this.$refs["changeCompanyUserForm"].validate(valid => {
  648. if (valid) {
  649. // 调用更换会员归属接口
  650. // 检查companyId是否已设置
  651. if (!this.changeCompanyUserForm.companyId) {
  652. this.$message.error('请选择公司');
  653. return;
  654. }
  655. changeCompanyUser(this.ids, {
  656. companyUserId: this.changeCompanyUserForm.companyUserId,
  657. companyId: this.changeCompanyUserForm.companyId
  658. }).then(response => {
  659. if (response.code === 200) {
  660. this.msgSuccess("操作成功");
  661. this.changeCompanyUserOpen = false;
  662. this.getList();
  663. } else {
  664. this.$message.error(response.msg || '操作失败');
  665. }
  666. }).catch(() => {
  667. this.$message.error('操作失败');
  668. });
  669. }
  670. });
  671. }
  672. }
  673. };
  674. </script>