userDefault.vue 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705
  1. <template>
  2. <div class="mainBox">
  3. <!-- 个人会员 -->
  4. <div class="layerBox">
  5. <el-form ref="form" :model="form" :rules="loginRules" class="login-form" autocomplete="on" label-position="left" label-width="120px">
  6. <div class="formDiv">
  7. <!--选择角色 start------------------------------------------>
  8. <el-form-item label="所属角色:" :label-width="formLabelWidth" prop="role_id" class="custom-align-right">
  9. <div class="formLabelFloatBox">
  10. <el-select v-model="form.role_id" placeholder="请选择..">
  11. <el-option
  12. v-for="item in role_idArr"
  13. :key="item.value"
  14. :label="item.label"
  15. :value="item.value">
  16. </el-option>
  17. </el-select>
  18. </div>
  19. </el-form-item>
  20. <!--选择角色 end------------------------------------------>
  21. <el-form-item label="登录账号:" :label-width="formLabelWidth" prop="user_name" class="custom-align-right">
  22. <el-input v-model="form.user_name" autocomplete="off" placeholder="请输入登录账号.."></el-input>
  23. </el-form-item>
  24. <div v-if="editId==''">
  25. <!--新密码 start------------------------------------------>
  26. <div class="PasswordBox">
  27. <el-form-item prop="password" label="登录密码:" class="custom-align-right">
  28. <div class="PasswordBody">
  29. <el-input
  30. :key="passwordType1"
  31. ref="password1"
  32. v-model="form.password"
  33. :type="passwordType1"
  34. placeholder="请输入密码"
  35. name="password"
  36. tabindex="2"
  37. autocomplete="off"
  38. @blur="capsTooltip2 = false"
  39. />
  40. <span class="show-pwd" @click="showPwd(1)">
  41. <svg-icon :icon-class="passwordType1 === 'password' ? 'eye' : 'eye-open'" />
  42. </span>
  43. </div>
  44. </el-form-item>
  45. </div>
  46. <!--新密码 end------------------------------------------>
  47. <!--新密码 start------------------------------------------>
  48. <div class="PasswordBox">
  49. <el-form-item prop="confirm_password" label="确认密码:" class="custom-align-right">
  50. <div class="PasswordBody">
  51. <el-input
  52. :key="passwordType2"
  53. ref="password2"
  54. v-model="form.confirm_password"
  55. :type="passwordType2"
  56. placeholder="请输入密码"
  57. name="password"
  58. tabindex="2"
  59. autocomplete="off"
  60. @blur="capsTooltip2 = false"
  61. />
  62. <span class="show-pwd" @click="showPwd(2)">
  63. <svg-icon :icon-class="passwordType2 === 'password' ? 'eye' : 'eye-open'" />
  64. </span>
  65. </div>
  66. </el-form-item>
  67. </div>
  68. <!--新密码 end------------------------------------------>
  69. </div>
  70. <el-form-item label="真实姓名:" :label-width="formLabelWidth" prop="real_name" class="custom-align-right">
  71. <el-input v-model="form.real_name" autocomplete="off" placeholder="请输入真实姓名.."></el-input>
  72. </el-form-item>
  73. <el-form-item label="照片:" :label-width="formLabelWidth" prop="" :class="['custom-form-item']" class="custom-align-right">
  74. <div class="uploaderBox">
  75. <!--图片上传组件 start ------------------------------------------------------------>
  76. <div class="avatar-upload-container" @mouseenter="hovering = true" @mouseleave="hovering = false">
  77. <!-- 上传组件 -->
  78. <el-upload
  79. class="avatar-uploader"
  80. action="#"
  81. :show-file-list="false"
  82. :before-upload="beforeAvatarUpload"
  83. >
  84. <!-- 预览图片 -->
  85. <img v-if="photoUrl" :src="photoUrl" class="avatar">
  86. <!-- 上传图标 -->
  87. <div v-else class="chooseImgDiv">
  88. <div>
  89. <img src="@/assets/public/upload/noImage.png">
  90. <div>选择图片</div>
  91. </div>
  92. </div>
  93. </el-upload>
  94. <!-- 删除按钮,当鼠标悬浮时显示 -->
  95. <div v-if="hovering && photoUrl" class="delete-button" @click="handleDelete">
  96. <i class="el-icon-delete"></i>
  97. </div>
  98. </div>
  99. <!--图片上传组件 end ------------------------------------------------------------>
  100. </div>
  101. </el-form-item>
  102. <el-form-item label="身份证号:" :label-width="formLabelWidth" prop="id_card" class="custom-align-right">
  103. <el-input v-model="form.id_card" autocomplete="off" placeholder="请输入身份证号.."></el-input>
  104. </el-form-item>
  105. <el-form-item label="性别:" :label-width="formLabelWidth" prop="gender" class="custom-align-right">
  106. <el-radio v-model="form.gender" label="1">男</el-radio>
  107. <el-radio v-model="form.gender" label="2">女</el-radio>
  108. </el-form-item>
  109. <el-form-item label="手机号:" :label-width="formLabelWidth" prop="mobile" class="custom-align-right">
  110. <el-input v-model="form.mobile" autocomplete="off" placeholder="请输入手机号.."></el-input>
  111. </el-form-item>
  112. <el-form-item label="出生年月:" :label-width="formLabelWidth" prop="birthday" class="custom-align-right">
  113. <el-date-picker
  114. v-model="form.birthday"
  115. type="date"
  116. placeholder="选择日期">
  117. </el-date-picker>
  118. </el-form-item>
  119. <el-form-item label="有效期:" :label-width="formLabelWidth" prop="" class="custom-align-right">
  120. <el-date-picker
  121. v-model="timeList"
  122. type="daterange"
  123. :disabled="form.long_time === 1"
  124. range-separator="至"
  125. start-placeholder="开始日期"
  126. end-placeholder="结束日期"
  127. :picker-options="pickerOptions">
  128. </el-date-picker>
  129. <el-checkbox v-model="form.long_time" :true-label="1" :false-label="0" class="longTimeCheckbox">无限期</el-checkbox>
  130. </el-form-item>
  131. <!-- <el-form-item label="站点标识:" :label-width="formLabelWidth" prop="city_arr_id" class="custom-align-right"> -->
  132. <el-form-item label="站点标识:" :label-width="formLabelWidth" prop="websiteTag_arr_id" class="custom-align-right">
  133. <!-- 级联选择器 xx-->
  134. <!-- websiteTag_ -->
  135. <!-- <el-cascader v-model="form.website_column_arr_id" :props="props_1" :options="website_column_arr" filterable clearable ></el-cascader> -->
  136. <el-cascader v-model="form.websiteTag_arr_id" :options="options_arr" filterable clearable></el-cascader>
  137. </el-form-item>
  138. <el-form-item label="籍贯:" :label-width="formLabelWidth" prop="" class="custom-align-right">
  139. <CityCascader v-model="form.native_place_arr_id" @update-city-id="update_native_place_arr_id"></CityCascader>
  140. </el-form-item>
  141. <el-form-item label="QQ:" :label-width="formLabelWidth" prop="" class="custom-align-right">
  142. <el-input v-model="form.qq" autocomplete="off" placeholder="请输入QQ号.."></el-input>
  143. </el-form-item>
  144. <el-form-item label="电子邮箱:" :label-width="formLabelWidth" prop="" class="custom-align-right">
  145. <el-input v-model="form.email" autocomplete="off" placeholder="请输入电子邮箱.."></el-input>
  146. </el-form-item>
  147. <el-form-item label="邮编:" :label-width="formLabelWidth" prop="" class="custom-align-right">
  148. <el-input v-model="form.zip_code" autocomplete="off" placeholder="请输入邮编.."></el-input>
  149. </el-form-item>
  150. <el-form-item label="详细地址:" :label-width="formLabelWidth" prop="" class="custom-align-right">
  151. <CityCascader v-model="form.address_arr_id" @update-city-id="update_address_arr_id"></CityCascader>
  152. </el-form-item>
  153. <el-form-item label="" :label-width="formLabelWidth" prop="" class="custom-align-right">
  154. <el-input v-model="form.address" autocomplete="off" placeholder="请输入门牌号.."></el-input>
  155. </el-form-item>
  156. <el-form-item label="相关资料:" :label-width="formLabelWidth" prop="" class="custom-align-right">
  157. <el-upload
  158. class="upload-demo"
  159. :action="uploadFileUrl"
  160. :headers="headers"
  161. :on-preview="handlePreview"
  162. :on-remove="handleRemove"
  163. :before-remove="beforeRemove"
  164. :on-success="handleUploadSuccess"
  165. multiple
  166. :limit="30"
  167. :on-exceed="handleExceed"
  168. :file-list="otherList">
  169. <el-button size="small" type="primary">点击上传</el-button>
  170. <div slot="tip" class="el-upload__tip">每张图片最大1MB,最多上传30张图片。</div>
  171. </el-upload>
  172. </el-form-item>
  173. <el-form-item label="提示词:" :label-width="formLabelWidth" prop="" class="custom-align-right">
  174. <el-input type="textarea" v-model="form.remark" class="custom-textarea" placeholder="请输入提示词"></el-input>
  175. </el-form-item>
  176. </div>
  177. </el-form>
  178. </div>
  179. <div class="bottomBtnBox">
  180. <el-button type="info" @click="goList">返回</el-button>
  181. <el-button type="primary" @click="addData" v-if="editId==''">提交</el-button>
  182. <el-button type="primary" @click="editData" v-else>修改</el-button>
  183. </div>
  184. </div>
  185. </template>
  186. <script>
  187. // 引入公用样式
  188. import '@/styles/global.less';
  189. // 引入baseUrl
  190. import URL from '@/utils/baseUrl';
  191. //城市级联选择器
  192. import CityCascader from './CityCascader';
  193. //格式化时间
  194. import { formatLocalDate } from '@/utils/public';
  195. export default {
  196. components: {
  197. CityCascader, //城市级联选择器
  198. },
  199. data() {
  200. // 配置验证规则:用于表单验证
  201. const validatePassword = (rule, value, callback) => {
  202. if (value.length < 6) {
  203. callback(new Error('密码不能低于6位!'))
  204. } else {
  205. callback()
  206. }
  207. }
  208. const validateEmpty = (rule,value,callback) => {
  209. if (!value || value.trim() === "") {
  210. callback(new Error('该项不能为空!'));
  211. } else {
  212. callback();
  213. }
  214. }
  215. const validateArray = (rule,value,callback) => {
  216. if (value.length == 0) {
  217. callback(new Error('该项不能为空!'))
  218. } else {
  219. callback()
  220. }
  221. }
  222. return {
  223. //xx
  224. // options_arr:[ { "label": "农网", "value": 1, "pid": 0, "sort": 1, "remark": "农网栏目信息", "column_arr_id": null, "updated_at": "2024-06-19 23:58:52", "created_at": "2024-06-06 09:28:19", "children": [ { "label": "核心网站(行星)", "value": 3, "pid": 1, "sort": 1, "remark": "核心网站", "column_arr_id": null, "updated_at": "2024-06-19 23:58:52", "created_at": "2024-06-06 01:31:26" }, { "label": "重点网系(卫星)", "value": 4, "pid": 1, "sort": 1, "remark": "重点网系", "column_arr_id": null, "updated_at": "2024-06-19 23:58:52", "created_at": "2024-06-06 01:32:06" }, { "label": "垂直网系(卫星)", "value": 5, "pid": 1, "sort": 1, "remark": "垂直网系", "column_arr_id": null, "updated_at": "2024-06-19 23:58:52", "created_at": "2024-06-06 01:32:43" }, { "label": "频道网系(卫星)", "value": 6, "pid": 1, "sort": 1, "remark": "频道网系", "column_arr_id": null, "updated_at": "2024-06-19 23:58:52", "created_at": "2024-06-06 01:33:19" }, { "label": "地方网系(卫星)", "value": 7, "pid": 1, "sort": 1, "remark": "地方网系", "column_arr_id": null, "updated_at": "2024-06-19 23:58:52", "created_at": "2024-06-06 01:33:44" } ] } ],
  225. options_arr:[],
  226. formLabelWidth:"120px",
  227. editId:"",
  228. uploadFileUrl:URL.testUrl+"/public/uploadFile",//获得上传地址
  229. headers: {},
  230. website_tag_params:{//xx
  231. keyword:"",//网站名称查询
  232. website_column_id:[],//使用网系id查询
  233. city_id:[],//使用城市id查询
  234. page:1,//当前是第几页
  235. pageSize:666666,//一共多少条
  236. name:"",
  237. },
  238. form:{
  239. websiteTag_arr_id:[], //站点标识下拉id only
  240. websiteTag_reg:"",
  241. sszq:"", //站点标识下拉id
  242. type_id:1,//个人会员
  243. role_id:"",//角色id
  244. user_name:"",//登录账号
  245. password:"",//密码
  246. confirm_password:"",//确认密码
  247. real_name:"",//真实姓名
  248. avatar:"",//照片
  249. id_card:"",//身份证号
  250. birthday:"",//出生年月
  251. gender:"1",//性别
  252. mobile:"",//手机号
  253. native_place_arr_id:"",//籍贯
  254. address_arr_id:"",//详细地址
  255. address:"",//详细地址
  256. from_time:"",//有效期开始时间
  257. to_time:"",//有效期结束时间
  258. long_time:0,//是否为长期 //长期1:长期 0:非长期
  259. qq:"",//QQ
  260. email:"",//电子邮箱
  261. other:[],//相关资料
  262. remark:"",//提示词
  263. },
  264. timeList:[],//时间段
  265. otherList:[],//相关资料列表
  266. role_idArr:[],//角色id池
  267. //上传照片
  268. photoUrl:'',
  269. hovering: false, // 鼠标悬浮状态 悬浮时显示删除
  270. //密码验证
  271. capsTooltip1: false,
  272. capsTooltip2: false,
  273. passwordType1: 'password',
  274. passwordType2: 'password',
  275. //配置from表单验证规则
  276. loginRules: {
  277. // 站点标识xx
  278. websiteTag_arr_id: [{ type:'array',required: true, trigger: 'blur', validator: validateArray }],
  279. //1.角色id
  280. role_id: [{ required: true, trigger: 'blur', validator: validateArray }],
  281. //2.登录账号
  282. user_name: [{ required: true, trigger: 'blur', validator: validateEmpty }],
  283. //3.密码和确认密码
  284. password: [{ required: true, trigger: 'blur', validator: validatePassword }],
  285. confirm_password: [{ required: true, trigger: 'blur', validator: validatePassword }],
  286. //5.真实姓名
  287. real_name: [{ required: true, trigger: 'blur', validator: validateEmpty }],
  288. //6.手机号
  289. mobile: [{ required: true, trigger: 'blur', validator: validateEmpty }],
  290. //7.身份证号
  291. id_card: [{ required: true, trigger: 'blur', validator: validateEmpty }],
  292. //8.性别
  293. gender: [{ required: true, trigger: 'blur', validator: validateEmpty }],
  294. //9.手机号
  295. mobile: [{ required: true, trigger: 'blur', validator: validateEmpty }],
  296. },
  297. //时间跨度
  298. pickerOptions: {
  299. selectableRange: '1900-01-01 to 2100-12-31', // 允许选择的日期范围
  300. disabledDate(time) {
  301. return time.getTime() < Date.now() - 86400000; // 禁用今天之前的日期
  302. },
  303. },
  304. };
  305. },
  306. methods: {
  307. //1.表单收集 start ------------------------------------------------------------>
  308. //1.1切换密码框的显示与隐藏
  309. showPwd(num) {
  310. const passwordTypeKey = 'passwordType' + num; //动态生成 passwordType 的键
  311. const passwordRefKey = 'password' + num; //动态生成 password 的引用
  312. // 切换密码类型
  313. if (this[passwordTypeKey] === 'password') {
  314. this[passwordTypeKey] = ''; //显示密码
  315. } else {
  316. this[passwordTypeKey] = 'password'; //隐藏密码
  317. }
  318. // 使用 $nextTick 聚焦到对应的密码输入框
  319. this.$nextTick(() => {
  320. this.$refs[passwordRefKey].focus(); //聚焦到对应的密码输入框
  321. });
  322. },
  323. //1.2获得角色列表池
  324. getRoleList(){
  325. let data = {
  326. page:1,
  327. pageSize:100
  328. }
  329. this.$store.dispatch('userRole/roleList',data).then(res=>{
  330. this.role_idArr = res.data.rows.map(item => ({
  331. value: item.id,
  332. label: item.role_name
  333. }));
  334. }).catch(error=>{
  335. this.$message({
  336. type: 'warning',
  337. message: '网络错误,请重试!'
  338. });
  339. })
  340. },
  341. //1.4更新籍贯
  342. update_native_place_arr_id(value){
  343. console.log("籍贯ID已更新:", value);
  344. this.form.native_place_arr_id = value;
  345. },
  346. //1.5更新详细地址
  347. update_address_arr_id(value){
  348. console.log("详细地址ID已更新:", value);
  349. this.form.address_arr_id = value;
  350. },
  351. //1.5重置表单
  352. clearData(){
  353. },
  354. //表单收集 end ------------------------------------------------------------>
  355. //2.提交表单 start ------------------------------------------------------------>
  356. //2.1 上传图片操作
  357. beforeAvatarUpload(file) {
  358. const isJPG = file.type === 'image/jpeg';
  359. const isPNG = file.type === 'image/png';
  360. const isLt2M = file.size / 1024 / 1024 < 2;
  361. if (!isJPG && !isPNG) {
  362. this.$message.error('上传头像图片只能是 JPG 或 PNG 格式!');
  363. return false;
  364. }
  365. if (!isLt2M) {
  366. this.$message.error('上传头像图片大小不能超过 2MB!');
  367. return false;
  368. }
  369. const formData = new FormData();
  370. formData.append('file', file);
  371. this.$store.dispatch('pool/uploadFile',formData).then(res=> {
  372. this.photoUrl = res.data.imgUrl;//显示缩略图
  373. this.form.avatar = res.data.imgUrl;//提供表单地址
  374. console.log(res.data.imgUrl)
  375. }).catch(() => {
  376. this.$message({
  377. type: 'warning',
  378. message: '网络错误,请重试!'
  379. });
  380. })
  381. // 阻止默认的上传行为
  382. return false;
  383. },
  384. //2.2 删除图片
  385. handleDelete() {
  386. this.photoUrl = ''; // 清空图片 URL
  387. },
  388. //2.3 多文件上传
  389. handleRemove(file, fileList) {
  390. console.log(file, fileList);
  391. },
  392. handlePreview(file) {
  393. console.log(file);
  394. },
  395. handleExceed(files, fileList) {
  396. this.$message.warning(`当前限制选择 30 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
  397. },
  398. beforeRemove(file, fileList) {
  399. return this.$confirm(`确定移除 ${ file.name }?`);
  400. },
  401. //获取token
  402. getTokenFromCookie() {
  403. const name = "Admin-Token=";
  404. const decodedCookie = decodeURIComponent(document.cookie);
  405. const cookieArray = decodedCookie.split(';');
  406. for (let i = 0; i < cookieArray.length; i++) {
  407. let cookie = cookieArray[i].trim();
  408. if (cookie.indexOf(name) === 0) {
  409. return cookie.substring(name.length, cookie.length); // 返回 token
  410. }
  411. }
  412. return ""; // 如果没有找到 token,返回空字符串
  413. },
  414. //设置token
  415. setHeaders() {
  416. this.token = this.getTokenFromCookie(); // 从 cookie 中获取 token
  417. this.headers = { token: this.token }; // 设置 headers
  418. console.log(this.headers); // 打印 headers
  419. },
  420. //上传成功以后
  421. handleUploadSuccess(response) {
  422. this.form.other.push(response.data.imgUrl)
  423. console.log('上传成功:', response);
  424. console.log(this.form.other);
  425. },
  426. //提交表单xx
  427. addData(){
  428. //站点标识内容
  429. this.form.sszq=String(this.form.websiteTag_arr_id[0])//站点标识内容加到form
  430. //1.格式化时间戳
  431. this.form.birthday = formatLocalDate(this.form.birthday);
  432. if(this.form.long_time==0){
  433. this.form.from_time = formatLocalDate(this.timeList[0]);
  434. this.form.to_time = formatLocalDate(this.timeList[1]);
  435. }else{
  436. this.form.from_time = "";
  437. this.form.to_time = "";
  438. delete this.form.from_time;
  439. delete this.form.to_time;
  440. }
  441. //2.开始验证
  442. this.$refs.form.validate(valid => {
  443. if (valid) {
  444. //3.验证用户是否已经存在
  445. this.$store.dispatch('userMember/verifyUserInfo',{user_name:this.form.user_name}).then(res=>{
  446. if(res.code==0){
  447. //如果code为0表示用户不存在,提交表单
  448. this.$store.dispatch('userMember/createUser',this.form).then(res=>{
  449. if(res.code==200){
  450. console.log(res);
  451. this.$message({
  452. type: 'success',
  453. message: '用户添加成功!'
  454. });
  455. this.goList();
  456. }else{
  457. this.$message({
  458. type: 'warning',
  459. message: res.message
  460. });
  461. }
  462. })
  463. }else if(res.code==200){
  464. //如果code==200 表示用户存在,阻止进一步提交
  465. this.$message({
  466. type: 'warning',
  467. message: '该账号已被注册,请更换其他账号!'
  468. });
  469. }
  470. }).catch(error=>{
  471. this.$message({
  472. type: 'warning',
  473. message: '网络错误,请重试!'
  474. });
  475. })
  476. }
  477. })
  478. },
  479. //提交表单 start ------------------------------------------------------------>
  480. //3.编辑表单 start ------------------------------------------------------------>
  481. //获得用户信息
  482. getUserInfo(){
  483. this.$store.dispatch('userMember/getUser',{id:this.editId}).then(res=>{
  484. console.log(res);
  485. //回显数据
  486. this.form.type_id = res.data.type_id;
  487. this.form.user_name = res.data.user_name;
  488. this.form.role_id = res.data.role_id;
  489. this.form.real_name = res.data.real_name;
  490. this.form.mobile = res.data.mobile;
  491. this.photoUrl = res.data.avatar;
  492. this.form.avatar = res.data.avatar;
  493. this.form.id_card = res.data.id_card;
  494. this.form.birthday = res.data.birthday;
  495. //还原有效期
  496. if(res.data.long_time==0){
  497. this.timeList = [
  498. res.data.from_time,
  499. res.data.to_time
  500. ]
  501. this.form.from_time = res.data.from_time;
  502. this.form.to_time = res.data.to_time;
  503. this.form.long_time = 0;
  504. }else{
  505. this.form.from_time = "";
  506. this.form.to_time = "";
  507. this.form.long_time = 1;
  508. }
  509. this.form.qq = res.data.qq;
  510. this.form.email = res.data.email;
  511. this.form.address = res.data.address;
  512. this.form.zip_code = res.data.zip_code;
  513. this.form.remark = res.data.remark;
  514. this.form.native_place_arr_id = res.data.native_place_arr_id;
  515. // 处理文件列表
  516. const fileArrayString = res.data.other; // 假设这是一个字符串格式的数组
  517. const fileArray = JSON.parse(fileArrayString); // 解析为数组
  518. this.form.other.push(...fileArray); // 将解析出来的值 push 到 this.form.other
  519. // 将文件列表赋值给 otherList,生成默认文件名
  520. this.otherList = fileArray.map((url, index) => ({
  521. name: `文件${index + 1}`, // 生成文件名
  522. url: url, // 文件的 URL
  523. status: 'success' // 设置状态为 success
  524. }));
  525. }).catch(error=>{
  526. this.$message({
  527. type: 'warning',
  528. message: '网络错误,请重试!'
  529. });
  530. })
  531. },
  532. //修改用户
  533. editData(){
  534. //1.格式化时间戳
  535. this.form.birthday = formatLocalDate(this.form.birthday);
  536. if(this.form.long_time==0){
  537. this.form.from_time = formatLocalDate(this.timeList[0]);
  538. this.form.to_time = formatLocalDate(this.timeList[1]);
  539. }else{
  540. this.form.from_time = "";
  541. this.form.to_time = "";
  542. }
  543. this.$refs.form.validate(valid => {
  544. if (valid) {
  545. //1.验证用户是否存在
  546. this.$store.dispatch('userMember/verifyUserInfo',{id:this.editId,user_name:this.form.user_name}).then(res=>{
  547. if(res.code==0){
  548. console.log(this.form);
  549. this.form.native_place_arr_id = JSON.parse(this.form.native_place_arr_id);
  550. //2.设置修改的用户id
  551. this.form.id = this.editId;
  552. //3.提交用户修改
  553. //如果code为0表示用户不存在,提交表单
  554. this.$store.dispatch('userMember/updateUser',this.form).then(res=>{
  555. console.log(res);
  556. this.$message({
  557. type: 'success',
  558. message: '用户添加成功!'
  559. });
  560. this.goList();
  561. })
  562. }else if(res.code==200){
  563. //如果code==200 表示用户存在,阻止进一步提交
  564. this.$message({
  565. type: 'warning',
  566. message: '该账号已被注册,请更换其他账号!'
  567. });
  568. }
  569. }).catch(error=>{
  570. this.$message({
  571. type: 'warning',
  572. message: '网络错误,请重试!'
  573. });
  574. })
  575. }
  576. })
  577. },
  578. //编辑表单 end ------------------------------------------------------------>
  579. goList(){
  580. this.$router.push({
  581. path: '/userList',
  582. });
  583. },
  584. get_website_tag_arr_fun(){ //得到站点标识所有内容xx
  585. this.$store.dispatch('pool/get_website_tag_arr_actions',this.website_tag_params).then(res=> {
  586. console.log("res.data.listres.data.list",res.data.list)
  587. res.data.list.forEach(( per_obj ) => {
  588. let new_per = {
  589. label: per_obj.name,
  590. value: per_obj.id,
  591. }
  592. this.options_arr.push( new_per )
  593. })
  594. console.log("get_website_tag_arr_funget_website_tag_arr_fun")
  595. console.log("get_website_tag_arr_funget_website_tag_arr_fun",this.options_arr)
  596. })
  597. },
  598. },
  599. mounted(){
  600. this.get_website_tag_arr_fun()//得到站点标识所有内容xx
  601. this.getRoleList();
  602. //判断是新建还是回显
  603. if(this.$route.query.id!=undefined){
  604. this.editId = this.$route.query.id;
  605. console.log("编辑用户!")
  606. this.getUserInfo();
  607. }else{
  608. console.log("添加用户!")
  609. }
  610. //设置token
  611. this.setHeaders(); // 在组件挂载时设置 headers
  612. }
  613. };
  614. </script>
  615. <style scoped lang="less">
  616. .PasswordBox {
  617. display: flex;
  618. align-items: center;
  619. .el-form-item {
  620. flex: 1;
  621. }
  622. .PasswordTitle {
  623. width:120px;
  624. text-align: right;
  625. margin-right: 10px;
  626. margin-bottom:22px;
  627. }
  628. .PasswordBody {
  629. flex: 1;
  630. display: flex;
  631. align-items: center;
  632. }
  633. .show-pwd {
  634. margin-left: 10px;
  635. }
  636. }
  637. .longTimeCheckbox {
  638. margin-left: 10px;
  639. }
  640. //执行v-deep穿透scope选择器 start------------------------------------------------------------>*/
  641. ::v-deep .custom-form-item > .el-form-item__label {
  642. line-height: 140px !important;
  643. }
  644. ::v-deep .custom-textarea .el-textarea__inner {
  645. resize: none; /* 禁止用户拖拽调整大小 */
  646. }
  647. ::v-deep .custom-align-right .el-form-item__label {
  648. text-align: right; /* 设置标签文字右对齐 */
  649. }
  650. ::v-deep .el-select {
  651. width: 100%; /* 禁止用户拖拽调整大小 */
  652. }
  653. //执行v-deep穿透scope选择器 end------------------------------------------------------------>*/
  654. </style>