workercard.html 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <link rel="icon" href="/static/image/logo.png">
  8. <!--<link href="https://cdn.jsdelivr.net/npm/@mdi/font@6.x/css/materialdesignicons.min.css" rel="stylesheet">-->
  9. <link href="/static/plugs/font-awesome-4.7.0/css/font-awesome.css" rel="stylesheet">
  10. <link href="/static/plugs/vuetify/vuetify.css" rel="stylesheet">
  11. <!-- 引入样式 -->
  12. <link rel="stylesheet" href="/static/plugs/iview/styles/iview.css">
  13. <title>水猫工匠-用户名片</title>
  14. <style>
  15. [v-cloak] {
  16. display: none !important;
  17. }
  18. body{
  19. color: #000;
  20. }
  21. #app{
  22. /**padding: 1em;*/
  23. }
  24. #images .img_list{
  25. margin-top: 10px;
  26. }
  27. .demo-upload-list{
  28. display: inline-block;
  29. width: 100%;
  30. height: 200px;
  31. text-align: center;
  32. line-height: 200px;
  33. border: 1px solid transparent;
  34. border-radius: 4px;
  35. overflow: hidden;
  36. background: #fff;
  37. position: relative;
  38. box-shadow: 0 1px 1px rgba(0,0,0,.2);
  39. margin-right: 4px;
  40. }
  41. .demo-upload-list img{
  42. width: 100%;
  43. height: 100%;
  44. }
  45. .demo-upload-list-cover{
  46. display: none;
  47. position: absolute;
  48. top: 0;
  49. bottom: 0;
  50. left: 0;
  51. right: 0;
  52. background: rgba(0,0,0,.6);
  53. }
  54. .demo-upload-list:hover .demo-upload-list-cover{
  55. display: block;
  56. }
  57. .demo-upload-list-cover i{
  58. color: #fff;
  59. font-size: 70px;
  60. cursor: pointer;
  61. margin: 0 20px;
  62. }
  63. #form .ivu-card-head{
  64. padding: 0px;
  65. width: 100%;
  66. height: 120px;
  67. }
  68. #form .ivu-card-head div{
  69. width: 100%;
  70. height: 100%;
  71. }
  72. #form .ivu-card-head div img{
  73. width: 100%;
  74. height: 100%;
  75. }
  76. .ivu-btn-primary:hover {
  77. color: #fff;
  78. background-color: #B3000F;
  79. border-color: #B3000F;
  80. }
  81. .ivu-btn-primary {
  82. color: #fff;
  83. background-color: #E60012;
  84. border-color: #E60012;
  85. }
  86. .red{
  87. color: #E60012;
  88. }
  89. .ivu-upload-drag:hover {
  90. border: 1px dashed #E60012;
  91. }
  92. </style>
  93. </head>
  94. <body>
  95. <div id="app" v-cloak>
  96. <!--<div id="header">
  97. <h1>水猫工匠-用户名片</h1>
  98. </div>-->
  99. <Card :bordered="false" id="form">
  100. <div slot="title">
  101. <img src="/static/image/workercard/banner.png">
  102. </div>
  103. <i-form :model="formdata" :label-width="80">
  104. <Form-item label="手机号" v-if="!isedit">
  105. <i-input v-model="formdata.telno" placeholder="请输入手机号"></i-input>
  106. </Form-item>
  107. <Form-item label="手机号" v-else>
  108. {{formdata.telno}}
  109. </Form-item>
  110. <div id="editform">
  111. <Form-item label="姓名">
  112. <i-input v-model="formdata.name" placeholder="请输入姓名"></i-input>
  113. </Form-item>
  114. <Form-item label="工种">
  115. <i-input v-model="formdata.work_type" placeholder="请输入工种"></i-input>
  116. </Form-item>
  117. <Form-item label="工种标签" >
  118. <i-select v-model="formdata.key_word" style="width:200px" multiple>
  119. <i-option v-for="(item,key) in worktypeonelabel" :value="item.label" :key="item.id">{{ item.label }}</i-option>
  120. </i-select>
  121. </Form-item>
  122. <Form-item label="年龄">
  123. <Input-number :max="100" :min="17" v-model="formdata.age"></Input-number>
  124. </Form-item>
  125. <Form-item label="籍贯">
  126. <i-input v-model="formdata.native" placeholder="请输入籍贯"></i-input>
  127. </Form-item>
  128. <Form-item label="工作地区">
  129. <i-input v-model="formdata.region" placeholder="请输入工作地区"></i-input>
  130. </Form-item>
  131. <Form-item label="交通工具">
  132. <i-input v-model="formdata.traffic_tools" placeholder="请输入交通工具"></i-input>
  133. </Form-item>
  134. <Form-item label="备注">
  135. <i-input type="textarea" v-model="formdata.note" placeholder="请输入备注"></i-input>
  136. </Form-item>
  137. <Form-item label="图片上传">
  138. <div id="images">
  139. <div class="img_list">
  140. <div class="demo-upload-list" v-for="(url,index) in uploadList" :key="index">
  141. <img :src="url">
  142. <div class="demo-upload-list-cover">
  143. <Icon type="ios-eye-outline" @click.native="handleView2(index)" class="red"></Icon>
  144. <Icon type="ios-trash-outline" @click.native="setdel2(index)" class="red"></Icon>
  145. </div>
  146. <i-button type="primary" long>提交</i-button>
  147. </div>
  148. </div>
  149. <!--:max-size="204800"-->
  150. <!--:on-exceeded-size="handleMaxSize" //action="https://app.tjzhxx.cn:5443/api/Cos/savephoto" http://app.tjzhxx.local.cn/api/Cos/savephoto-->
  151. <Upload
  152. ref="upload"
  153. :show-upload-list="false"
  154. :on-success="handleSuccess"
  155. :format="['jpg','jpeg','png']"
  156. :on-format-error="handleFormatError"
  157. :before-upload="handleBeforeUpload"
  158. :on-exceeded-size="handleMaxSize"
  159. :max-size="2048"
  160. name="file"
  161. type="drag"
  162. action="https://app.tjzhxx.cn:5443/api/Cos/savephoto"
  163. style="display: inline-block;width:100%;">
  164. <div style="width: 100%;height:58px;line-height: 58px;">
  165. <Icon type="md-camera" size="20" class="red"></Icon>
  166. </div>
  167. </Upload>
  168. <Modal title="查看图片" v-model="visible">
  169. <img :src="viewimgurl" v-if="visible" style="width: 100%">
  170. </Modal>
  171. </div>
  172. </Form-item>
  173. <Form-item>
  174. <i-button type="primary" long @click="saveinfo" :loading="issavingloading">提交</i-button>
  175. </Form-item>
  176. <Form-item label="用户照片" v-if="imglist&&imglist.length>0">
  177. <div class="img_list">
  178. <div class="demo-upload-list" v-for="(item,index) in imglist" :key="index">
  179. <img :src="item">
  180. <div class="demo-upload-list-cover">
  181. <Icon type="ios-eye-outline" @click.native="handleView(index)" class="red"></Icon>
  182. <Icon type="ios-trash-outline" @click.native="setdel1(item)"></Icon>
  183. </div>
  184. </div>
  185. </div>
  186. </Form-item>
  187. </div>
  188. </i-form>
  189. </Card>
  190. <Modal v-model="del1" width="360">
  191. <p style="color:#f60;text-align:center">
  192. <Icon type="information-circled"></Icon>
  193. <span>确认删除用户图片</span>
  194. </p>
  195. <div slot="footer">
  196. <Button type="error" size="large" long @click="delimg">删除</Button>
  197. </div>
  198. </Modal>
  199. <Modal v-model="del2" width="360">
  200. <p style="color:#f60;text-align:center">
  201. <Icon type="information-circled"></Icon>
  202. <span>确认删除上传图片</span>
  203. </p>
  204. <div slot="footer">
  205. <Button type="error" size="large" long @click="handleRemove2">删除</Button>
  206. </div>
  207. </Modal>
  208. </div>
  209. <script>
  210. var sharedata = {php}echo json_encode($sharedata);{/php};
  211. </script>
  212. <script src="/static/plugs/vue/vue.js"></script>
  213. <script src="/static/plugs/iview/iview.min.js"></script>
  214. <script src="/static/plugs/jquery/jquery.js"></script>
  215. <script src="/static/plugs/vuetify/vuetify.js"></script>
  216. <script src="/static/plugs/wechat/jweixin-1.0.0.js"></script>
  217. <!--<script src="/static/plugs/jssha/sha.js"></script>-->
  218. <script src="/static/plugs/js-sha1/sha1.js"></script>
  219. <!--<script src="/static/plugs/wechat/wx_share_config.js"></script>-->
  220. <script>
  221. var url =window.location.href;
  222. var string = "jsapi_ticket=" +sharedata.ticket + "&noncestr=" + sharedata.nonceStr+ "&timestamp=" +sharedata. timestamp + "&url=" + url;
  223. sign = sha1(string)
  224. wx.config({
  225. debug:false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  226. appId:sharedata.appid, // 必填,企业号的唯一标识,此处填写企业号corpid
  227. timestamp:sharedata.timestamp , // 必填,生成签名的时间戳
  228. nonceStr:sharedata.nonceStr, // 必填,生成签名的随机串
  229. signature: sign,// 必填,签名,见附录1
  230. jsApiList:['updateAppMessageShareData','onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
  231. });
  232. wx.error(function(res){
  233. // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
  234. //alert(11)
  235. //alert(JSON.stringify(res));
  236. });
  237. var share_info = {
  238. title:"水猫工匠-用户名片",
  239. desc:"水猫工匠-用户名片",
  240. link:window.location.href,
  241. imgUrl:''
  242. };
  243. //alert(JSON.stringify(share_info));
  244. </script>
  245. <script src="/static/plugs/wechat/wx_share.js"></script>
  246. <script>
  247. var app = new Vue({
  248. el: '#app',
  249. vuetify: new Vuetify(),
  250. data: {
  251. issavingloading:false,
  252. formdata:{
  253. name:"",
  254. age:17,
  255. telno:'',
  256. work_type:'',
  257. region:'',
  258. note:'',
  259. native:'',
  260. traffic_tools:'',
  261. key_word:[],
  262. user_id:0
  263. },
  264. imglistobj:{},
  265. imglist:false,
  266. uploadList:[],
  267. viewimgurl:'',
  268. visible:false,
  269. //url_host:"http://newwatercatserver.com/index.php/index",
  270. url_host:"https://app.tjzhxx.cn:11443/index.php/index",
  271. worktypeonelabel:[],
  272. userid:0,
  273. isedit:false,
  274. del1:false,
  275. del2:false,
  276. del_file:false,
  277. del_imgurl:false,
  278. },
  279. watch: {
  280. 'formdata.telno' (newValue, old) {
  281. //获取用户信息
  282. this.getinfobytelno(newValue)
  283. }
  284. },
  285. computed: {
  286. isloading: function () {
  287. }
  288. },
  289. methods:{
  290. handleView (index) {
  291. this.viewimgurl = this.imglist[index];
  292. this.visible = true;
  293. },
  294. setdel2(index){
  295. this.del2=true
  296. this.del_index = index;
  297. },
  298. setdel1(imgurl){
  299. //删除用户图片
  300. this.del1=true
  301. this.del_imgurl = imgurl;
  302. },
  303. handleRemove () {
  304. var file =this.del_file
  305. // 从 upload 实例删除数据
  306. const fileList = this.$refs.upload.fileList;
  307. this.$refs.upload.fileList.splice(fileList.indexOf(file), 1);
  308. this.del_file=false
  309. },
  310. handleView2 (key) {
  311. this.viewimgurl = this.uploadList[key];
  312. this.visible = true;
  313. },
  314. handleRemove2 () {
  315. var index = this.del_index
  316. // 从 upload 实例删除数据
  317. //const fileList = this.$refs.upload.fileList;
  318. //console.log(fileList);
  319. //this.$refs.upload.fileList.splice(fileList.indexOf(file), 1);
  320. //this.uploadList = this.$refs.upload.fileList;
  321. //console.log(this.uploadList);
  322. this.uploadList.splice(index, 1);
  323. this.del_index=false
  324. this.del2=false
  325. },
  326. handleSuccess (res, file) {
  327. this.$Message.destroy()
  328. if(1!=res.status){
  329. this.$Message.error(res.msg);
  330. return
  331. }
  332. var data = res.data
  333. var path = data.path
  334. // 因为上传过程为实例,这里模拟添加 url
  335. this.uploadList.push(path);
  336. //file.url = 'https://o5wwk8baw.qnssl.com/7eb99afb9d5f317c912f08b5212fd69a/avatar';
  337. //file.name = '7eb99afb9d5f317c912f08b5212fd69a';
  338. },
  339. handleFormatError (file) {
  340. this.$Notice.error({
  341. title: '文件格式不正确',
  342. desc: '文件 ' + file.name + ' 格式不正确,请上传 jpg 或 png 格式的图片。'
  343. });
  344. },
  345. handleMaxSize (file) {
  346. this.$Notice.warning({
  347. title: '超出文件大小限制',
  348. desc: '文件 ' + file.name + ' 太大,不能超过 2M。'
  349. });
  350. },
  351. handleBeforeUpload () {
  352. const check = this.uploadList.length < 5;
  353. if (!check) {
  354. this.$Notice.warning({
  355. title: '最多只能上传 5 张图片。'
  356. });
  357. }
  358. this.$Message.loading('图片上传中', 0);
  359. return check;
  360. },
  361. getinfobytelno(telno){
  362. //根据手机号获取信息
  363. var that = this;
  364. var url= this.url_host+"/workercardv1/getdatabytelnoforweb";
  365. var data ={telno:telno};
  366. $.ajax({
  367. type: 'POST',
  368. url: url,
  369. data:data,
  370. dataType: "json",
  371. success: function(res){
  372. //res = JSON.parse(res);
  373. console.log(res);
  374. if(200!=res.code){
  375. if(res.code<0){
  376. that.isedit =false;
  377. }else{
  378. that.$Notice.error({
  379. title: res.msg
  380. });
  381. }
  382. }else{
  383. that.isedit =true
  384. that.formdata=res.data
  385. that.userid = that.formdata.user_id;
  386. //查询素材图片
  387. that.getimglist();
  388. }
  389. }
  390. });
  391. },
  392. getimglist(){
  393. userid = this.userid;
  394. if(!userid||userid==''){
  395. return false;
  396. }
  397. //获取用户素材图片列表
  398. var that = this;
  399. var url= this.url_host+"/workercardv1/getwcimgdatalistbyuserid";
  400. var data ={userid:userid};
  401. $.ajax({
  402. type: 'POST',
  403. url: url,
  404. data:data,
  405. dataType: "json",
  406. success: function(res){
  407. if(200!=res.code){
  408. /*if(res.code<0){
  409. }else{
  410. that.$Notice.error({
  411. title: res.msg
  412. });
  413. }*/
  414. }else{
  415. var resultData = res.resultData
  416. that.imglistobj = resultData
  417. that.imglist = resultData.urls;
  418. }
  419. },
  420. error:function(XMLHttpRequest, textStatus, errorThrown){
  421. that.$Notice.error({
  422. title: textStatus
  423. });
  424. that.issavingloading = false;
  425. }
  426. });
  427. },
  428. saveinfo(){
  429. this.issavingloading = true;
  430. //保存用户信息
  431. var that = this;
  432. var url= this.url_host+"/workercardv1/savewcidinfoforweb";
  433. var data =this.formdata;
  434. $.ajax({
  435. type: 'POST',
  436. url: url,
  437. data:data,
  438. dataType: "json",
  439. success: function(res){
  440. console.log(res);
  441. if(200!=res.code){
  442. if(res.code<0){
  443. }else{
  444. that.$Notice.error({
  445. title: res.msg
  446. });
  447. }
  448. }else{
  449. that.$Notice.success({
  450. title: "用户信息保存成功"
  451. });
  452. var data = res.data
  453. that.userid = data['uid'];
  454. that.editimg();
  455. }
  456. that.issavingloading = false;
  457. },
  458. error:function(XMLHttpRequest, textStatus, errorThrown){
  459. that.$Notice.error({
  460. title: textStatus
  461. });
  462. that.issavingloading = false;
  463. }
  464. });
  465. },
  466. editimg(){
  467. //编辑素材图片
  468. var that = this;
  469. var url= this.url_host+"/workercardv1/editwcdataphotoimgforweb";
  470. if(this.uploadList.length>0){
  471. var data={userid:this.userid,url:this.uploadList}
  472. $.ajax({
  473. type: 'POST',
  474. url: url,
  475. data:data,
  476. dataType: "json",
  477. success: function(res){
  478. console.log(res);
  479. if(200!=res.code){
  480. if(res.code<0){
  481. }else{
  482. that.$Notice.error({
  483. title: res.msg
  484. });
  485. }
  486. }else{
  487. that.$Notice.success({
  488. title: "用户图片保存成功"
  489. });
  490. that.imglist=false
  491. that.uploadList=[]
  492. that.getimglist()
  493. }
  494. that.issavingloading = false;
  495. }
  496. });
  497. }
  498. },
  499. getworktypelabel(){
  500. //获取一级标签
  501. var that = this;
  502. var url= this.url_host+"/Worktype/getonelabellist";
  503. $.ajax({
  504. type: 'POST',
  505. url: url,
  506. dataType: "json",
  507. success: function(res){
  508. if(200!=res.code){
  509. that.$Notice.warning({
  510. title: res.msg
  511. });
  512. }else{
  513. that.worktypeonelabel=res.resultData
  514. let list = res.resultData
  515. for(let i in list){
  516. let item = list[i];
  517. if(item.is_default){
  518. that.formdata.key_word.push(item.label);
  519. }
  520. }
  521. }
  522. }
  523. });
  524. },
  525. getUrlParam(name) {
  526. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
  527. var r = window.location.search.substr(1).match(reg); //匹配目标参数
  528. if (r != null) return unescape(r[2]); return null; //返回参数值
  529. },
  530. delimg(){
  531. var imgurl = this.del_imgurl
  532. var that = this;
  533. var url= this.url_host+"/workercardv1/deleteuserimg";
  534. var data ={
  535. 'url':imgurl,
  536. 'userid':this.userid
  537. }
  538. $.ajax({
  539. type: 'POST',
  540. url: url,
  541. data:data,
  542. dataType: "json",
  543. success: function(res){
  544. if(200!=res.code){
  545. that.$Notice.warning({
  546. title: res.msg
  547. });
  548. }else{
  549. this.del_imgurl =false
  550. that.$Notice.success({
  551. title: res.msg
  552. });
  553. that.getimglist();
  554. that.del1=false
  555. }
  556. }
  557. });
  558. }
  559. },
  560. mounted() {
  561. var web_user_id=this.getUrlParam('reid');
  562. this.formdata.referrer_uid = web_user_id;
  563. this.getworktypelabel();
  564. }
  565. })
  566. </script>
  567. </body>
  568. </html>