outperson.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461
  1. <template>
  2. <fullscreen :fullscreen.sync="fullscreen" class="container">
  3. <div class="container-box">
  4. <toolList @iconCli='iconCli' :tooltit='tooltit'></toolList>
  5. <div class="search">
  6. <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
  7. <span>
  8. <el-button class="btn-check" size="medium" type="primary" @click="jumpto(1)">人员工位
  9. </el-button>
  10. <el-button class="btn-check" size="medium" type="primary" @click="jumpto(2)">人员统计
  11. </el-button>
  12. <el-button class="btn-check" size="medium" type="primary" @click="dialogCheck(3)">添加
  13. </el-button>
  14. </span>
  15. </div>
  16. <div class="tabbox">
  17. <el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
  18. tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
  19. <el-table-column prop="lineStrip" label="线条">
  20. </el-table-column>
  21. <el-table-column prop="frameSumName" label="对接科室">
  22. </el-table-column>
  23. <el-table-column prop="dockDepart" label="市场经营部对接人">
  24. </el-table-column>
  25. <el-table-column prop="fieldPerson" label="驻场人员姓名">
  26. </el-table-column>
  27. <el-table-column prop="idNum" label="身份证号">
  28. </el-table-column>
  29. <el-table-column prop="telNum" label="联系电话">
  30. </el-table-column>
  31. <el-table-column prop="personType" label="人员类别">
  32. </el-table-column>
  33. <el-table-column prop="affilAompanyName" label="归属公司">
  34. </el-table-column>
  35. <el-table-column prop="cardNum" label="卡编号">
  36. </el-table-column>
  37. <el-table-column label="操作" width="160px" align="center">
  38. <template slot-scope="scope">
  39. <el-button size="mini" type="primary" @click="dialogCheck(1,scope.row)">查看</el-button>
  40. <el-button size="mini" type="primary" @click="dialogCheck(2,scope.row)">修改</el-button>
  41. <el-button size="mini" type="danger" @click="delLine(scope.row)">删除</el-button>
  42. </template>
  43. </el-table-column>
  44. </el-table>
  45. <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
  46. :total="total">
  47. </el-pagination>
  48. </div>
  49. </div>
  50. <el-dialog :title="titname" :visible.sync="dialogStatus" width="50%" :destroy-on-close="true"
  51. :modal-append-to-body="false" :close-on-click-modal="false" :before-close="closedia">
  52. <div v-loading="loadinged">
  53. <el-form :model="infolist" ref="infolist" >
  54. <div class="info-line">
  55. <el-form-item>
  56. <span>线条</span>
  57. <el-input v-model="infolist.lineStrip" placeholder="线条" :disabled="disableStatus"></el-input>
  58. </el-form-item>
  59. <el-form-item>
  60. <span>对接科室</span>
  61. <el-select :popper-append-to-body="false" v-model="infolist.frameSumName" placeholder="对接科室">
  62. <el-option v-for="item in djks" :key="item.dataCode" :label="item.dataName"
  63. :value="item.dataCode">
  64. </el-option>
  65. </el-select>
  66. </el-form-item>
  67. <el-form-item>
  68. <span>对接人</span>
  69. <el-input v-model="infolist.dockDepart" placeholder="市场经营部对接人" :disabled="disableStatus"></el-input>
  70. </el-form-item>
  71. <el-form-item>
  72. <span>驻场人员</span>
  73. <el-input v-model="infolist.fieldPerson" placeholder="驻场人员姓名" :disabled="disableStatus"></el-input>
  74. </el-form-item>
  75. <el-form-item>
  76. <span>身份证号</span>
  77. <el-input v-model="infolist.idNum" placeholder="身份证号" :disabled="disableStatus"></el-input>
  78. </el-form-item>
  79. <el-form-item>
  80. <span>联系电话</span>
  81. <el-input v-model="infolist.telNum" placeholder="联系电话" :disabled="disableStatus"></el-input>
  82. </el-form-item>
  83. <el-form-item>
  84. <span>人员类别</span>
  85. <el-select :popper-append-to-body="false" v-model="infolist.personType" placeholder="对接科室">
  86. <el-option v-for="item in rylb" :key="item.dataCode" :label="item.dataName"
  87. :value="item.dataCode">
  88. </el-option>
  89. </el-select>
  90. </el-form-item>
  91. <el-form-item>
  92. <span>归属公司</span>
  93. <el-input v-model="infolist.affilAompanyName" placeholder="归属公司" :disabled="disableStatus"></el-input>
  94. </el-form-item>
  95. <el-form-item>
  96. <span>卡编号</span>
  97. <el-input v-model="infolist.cardNum" placeholder="卡编号" :disabled="disableStatus"></el-input>
  98. </el-form-item>
  99. </div>
  100. </el-form>
  101. <div slot="footer" class="dialog-footer myfooter">
  102. <el-button type="primary" @click="dialogCli(2)" v-if="titname !== '查看'">确 定</el-button>
  103. <el-button @click="dialogCli(1)" v-if="titname === '查看'">确 定</el-button>
  104. <el-button @click="dialogCli(1)">取 消</el-button>
  105. </div>
  106. </div>
  107. </el-dialog>
  108. <myMessage :messTit='messTit' @closeMessage="closeMessage" :centerDialogVisible="centerDialogVisible" v-if="centerDialogVisible"></myMessage>
  109. </fullscreen>
  110. </template>
  111. <script>
  112. import mySearch from "../../../components/search.vue";
  113. import myMessage from "../../../components/myMessage.vue"
  114. import toolList from '../../../components/toolList'
  115. export default {
  116. components: {
  117. mySearch,
  118. myMessage,
  119. toolList
  120. },
  121. data() {
  122. const regionCode = (rule, value, callback) => {
  123. if (!this.infolist.regionCode) {
  124. callback(new Error('不能为空'))
  125. } else {
  126. callback()
  127. }
  128. }
  129. return {
  130. rules: {
  131. regionCode: [{
  132. required: true,
  133. trigger: 'change',
  134. validator: regionCode
  135. }]
  136. },
  137. searchList: [
  138. {
  139. type: 'input',
  140. tit: '对接科室',
  141. value: '',
  142. width: '98%',
  143. },
  144. ],
  145. tooltit:'外部人员管理',
  146. fullscreen: false,
  147. total: 0,
  148. pageSize: 1,
  149. tableData: [],
  150. dialogStatus: false,
  151. disableStatus: false,
  152. titname: '',
  153. infolist: {},
  154. userInfo: {},
  155. params: {},
  156. centerDialogVisible: false,
  157. messTit: '',
  158. delid: '',
  159. loading:false,
  160. loadinged:false,
  161. rylb:[],
  162. djks:[],
  163. areaCode:'',
  164. areaName:'',
  165. }
  166. },
  167. methods: {
  168. jumpto(v){
  169. if(v == 1){
  170. this.$router.push({
  171. path: '/inperson',
  172. });
  173. this.setabList('市场经营部人员', '/inperson');
  174. }else{
  175. this.$router.push({
  176. path: '/census',
  177. });
  178. this.setabList('人员统计', '/census');
  179. }
  180. },
  181. closedia() {
  182. this.infolist = {};
  183. this.dialogStatus = false;
  184. },
  185. //搜索数据
  186. searchInfo(v) {
  187. this.params = {};
  188. v[0] ? this.params.regionName = v[0] : '';
  189. this.getList(this.params, this.pageSize);
  190. },
  191. //获取列表
  192. getList(v, n) {
  193. this.pageSize = n;
  194. let _this = this;
  195. this.loading = true;
  196. this.tableData = [];
  197. this.$http({
  198. url: "/market/workStaff/queryPage",
  199. method: "post",
  200. headers: {
  201. "Content-Type": "application/json",
  202. "page": '{"pageNo":"' + n + '","pageSize":"10"}'
  203. },
  204. data: v,
  205. }).then((res) => {
  206. this.tableData = res.data.data;
  207. this.total = res.data.totalRecord;
  208. this.loading = false;
  209. });
  210. },
  211. // 分页
  212. currchange(v) {
  213. this.pageSize = v;
  214. this.getList(this.params, this.pageSize);
  215. },
  216. //申请
  217. dialogCheck(v, n) {
  218. this.dialogStatus = true;
  219. this.infolist = Object.assign({}, n);
  220. if (v === 1) {
  221. this.titname = '查看';
  222. this.disableStatus = true;
  223. return
  224. } else if (v === 2) {
  225. this.titname = '修改';
  226. this.disableStatus = false;
  227. } else if (v === 3) {
  228. this.titname = '添加';
  229. this.disableStatus = false;
  230. }
  231. this.infolist.opNo = this.userInfo.loginNo;
  232. this.infolist.opName = this.userInfo.loginName;
  233. },
  234. //添加
  235. dialogCli(v) {
  236. if (v === 1) {
  237. this.infolist = {};
  238. this.dialogStatus = false;
  239. return
  240. } else {
  241. this.infolist.opTime = this.$formatDate(new Date(), "YYYY-MM-DD HH:mm:ss");
  242. if (this.titname === '添加') {
  243. this.submitInfo("/market/cWorkStaff/add");
  244. } else if (this.titname === '修改') {
  245. this.submitInfo("/market/workStaff/update", v);
  246. }
  247. }
  248. },
  249. submitInfo(u) {
  250. let _this = this;
  251. this.$refs.infolist.validate(valid => {
  252. if (valid) {
  253. this.loadinged = true;
  254. this.$http({
  255. url: u,
  256. method: "post",
  257. headers: {
  258. "Content-Type": "application/json",
  259. },
  260. data: this.infolist,
  261. }).then((res) => {
  262. this.loadinged = false;
  263. if (res.data.result === 1) {
  264. _this.$message({
  265. message: res.data.desc,
  266. type: 'error'
  267. });
  268. } else {
  269. _this.$message({
  270. message: '成功',
  271. type: 'success'
  272. });
  273. _this.infolist = {};
  274. _this.dialogStatus = false;
  275. _this.getList({}, _this.pageSize);
  276. }
  277. });
  278. }
  279. })
  280. },
  281. closeMessage(v) {
  282. this.centerDialogVisible = false;
  283. let _this = this;
  284. if (v === 1) {
  285. _this.$http({
  286. url: "/market/workStaff/del",
  287. method: "post",
  288. headers: {
  289. "Content-Type": "application/json",
  290. },
  291. data: {
  292. id: this.delid
  293. },
  294. }).then((res) => {
  295. if (res.data.result === 1) {
  296. _this.$message({
  297. message: res.data.desc,
  298. type: 'error'
  299. });
  300. } else {
  301. _this.$message({
  302. message: '删除成功',
  303. type: 'success'
  304. });
  305. _this.getList(this.params, this.pageSize);
  306. }
  307. });
  308. }
  309. },
  310. //删除
  311. delLine(v) {
  312. this.centerDialogVisible = true;
  313. this.messTit = '即将删除此条数据, 是否删除?';
  314. this.delid = v.id;
  315. },
  316. //文件返回值
  317. uploadBack(v) {
  318. console.log(v)
  319. },
  320. //功能栏
  321. iconCli(v) {
  322. if (v === 1) {
  323. this.getList(this.params, this.pageSize);
  324. }
  325. if (v === 2) {
  326. this.fullscreen = !this.fullscreen
  327. }
  328. },
  329. getUser() {
  330. this.userInfo = JSON.parse(window.sessionStorage.userInfo);
  331. this.$http({
  332. url: "/market/cfgDataDict/queryList",
  333. method: "post",
  334. headers: {
  335. "Content-Type": "application/json",
  336. },
  337. data: {
  338. dictCode: 'workStaffType'
  339. },
  340. }).then((res) => {
  341. this.rylb = res.data;
  342. });
  343. this.$http({
  344. url: "/market/cfgDataDict/queryList",
  345. method: "post",
  346. headers: {
  347. "Content-Type": "application/json",
  348. },
  349. data: {
  350. dictCode: 'workDept'
  351. },
  352. }).then((res) => {
  353. this.djks = res.data;
  354. });
  355. },
  356. setabList(n, p) {
  357. let params = {
  358. children: "",
  359. name: n,
  360. rountPath: p,
  361. target: "_self",
  362. };
  363. for (let i = 0; i < this.$store.state.tabList.length; i++) {
  364. if (this.$store.state.tabList[i].name === params.name) {
  365. this.$store.state.tabList[i] = params;
  366. }
  367. }
  368. let set = new Set([...this.$store.state.tabList, params]);
  369. set.add(params);
  370. this.$store.commit("setDefaultActive", params.rountPath);
  371. this.$store.commit("setTabList", Array.from(set));
  372. },
  373. },
  374. mounted() {
  375. this.getList({}, 1);
  376. this.getUser();
  377. },
  378. created() {
  379. }
  380. }
  381. </script>
  382. <style scoped lang="scss">
  383. .onetab {
  384. margin-bottom: 20px;
  385. padding: 0 20px;
  386. }
  387. .titbox {
  388. div {
  389. float: right;
  390. i {
  391. font-size: 22px;
  392. margin-left: 20px;
  393. cursor: pointer;
  394. }
  395. }
  396. }
  397. .tabbox {
  398. margin-top: 15px;
  399. }
  400. .pageBox {
  401. text-align: right;
  402. margin-top: 10px;
  403. }
  404. .info-line {
  405. width: 100%;
  406. display: block;
  407. padding-left: 20px;
  408. div {
  409. width: 50%;
  410. display: inline-block;
  411. }
  412. span {
  413. width: 80px;
  414. display: inline-block;
  415. text-align: left;
  416. i {
  417. color: red;
  418. display: inline-block;
  419. padding-right: 5px;
  420. }
  421. }
  422. .el-select,
  423. .el-input {
  424. width: calc(100% - 100px);
  425. }
  426. }
  427. .online {
  428. width: 100%;
  429. .el-select {
  430. width: calc(100% - 100px);
  431. }
  432. span {
  433. vertical-align: top;
  434. }
  435. .el-textarea {
  436. width: calc(100% - 100px);
  437. }
  438. }
  439. </style>