comp.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476
  1. <template>
  2. <section>
  3. <!--工具条-->
  4. <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
  5. <el-form :inline="true" :model="filters">
  6. <el-form-item>
  7. <el-input v-model="filters.keyName" placeholder="请输入资产方名称进行搜索" clearable></el-input>
  8. </el-form-item>
  9. <el-form-item>
  10. <el-button type="primary" @click.native="getComp">查询</el-button>
  11. </el-form-item>
  12. <el-form-item style="float:right;">
  13. <el-button type="primary" @click.native="handleAdd">新增</el-button>
  14. </el-form-item>
  15. </el-form>
  16. </el-col>
  17. <!--列表-->
  18. <el-table :data="list" highlight-current-row :height="tableHeight" v-loading="listLoading" style="width: 100%;">
  19. <el-table-column type="index" width="60"></el-table-column>
  20. <el-table-column prop="companyName" label="资产方名称" width="250" sortable>
  21. </el-table-column>
  22. <el-table-column prop="administrator" label="资产方管理员" width="150" sortable>
  23. <template slot-scope="scope">
  24. <router-link to="/staff" tag="span" style="cursor: pointer; color: #409eff;">{{scope.row.administrator}}</router-link>
  25. </template>
  26. </el-table-column>
  27. <el-table-column prop="relateCompanyList" label="关联生产方" width="400" sortable>
  28. <template slot-scope="scope">
  29. <span class="info" v-for="(item, index) in scope.row.relateCompanyList">
  30. {{item.companyName}}
  31. <span v-if="index != scope.row.relateCompanyList.length-1">、</span>
  32. </span>
  33. </template>
  34. </el-table-column>
  35. <el-table-column prop="companyAddress" label="资产方地址" sortable></el-table-column>
  36. <el-table-column label="操作" width="150">
  37. <template slot-scope="scope">
  38. <el-button size="small" @click.native="handleEdit(scope.$index, scope.row)">编辑</el-button>
  39. <el-button type="danger" size="small" @click.native.native="handleDel(scope.$index, scope.row)">删除</el-button>
  40. </template>
  41. </el-table-column>
  42. </el-table>
  43. <!--工具条-->
  44. <el-col :span="24" class="toolbar">
  45. <el-pagination
  46. @size-change="handleSizeChange"
  47. @current-change="handleCurrentChange"
  48. :page-sizes="[20 , 50 , 80 , 100]"
  49. :page-size="20"
  50. layout="total, sizes, prev, pager, next"
  51. :total="total"
  52. style="float:right;">
  53. </el-pagination>
  54. </el-col>
  55. <!--新增界面-->
  56. <el-dialog :title="addTitle" v-if="addFormVisible" :visible.sync="addFormVisible" :close-on-click-modal="false" customClass='customWidth'>
  57. <el-form :model="addForm" label-width="100px" :rules="formRules" ref="addForm">
  58. <el-form-item label="资产方名称" prop="companyName" v-show="addState">
  59. <el-input v-model="addForm.companyName" autocomplete="off" placeholder="请输入资产方地址"></el-input>
  60. </el-form-item>
  61. <el-form-item label="关联生产方" v-show="addState">
  62. <el-select v-model="addForm.companyIds" clearable multiple filterable placeholder="请选择生产方" style="width:533px">
  63. <el-option v-for="item in companys" :key="item.id" :label="item.companyName" :value="item.id">
  64. </el-option>
  65. </el-select>
  66. </el-form-item>
  67. <el-form-item label="资产方地址" prop="companyAddress" v-show="addState">
  68. <el-input v-model="addForm.companyAddress" autocomplete="off" placeholder="请输入资产方地址"></el-input>
  69. </el-form-item>
  70. <el-form-item label="姓名" prop="username" v-show="!addState">
  71. <el-input v-model="addForm.username" autocomplete="off" placeholder="请输入姓名"></el-input>
  72. </el-form-item>
  73. <el-form-item label="手机号" prop="account" v-show="!addState">
  74. <el-input v-model="addForm.account" autocomplete="off" placeholder="请输入手机号"></el-input>
  75. </el-form-item>
  76. <el-form-item label="角色" v-show="!addState">
  77. <el-input v-model="addForm.roleName" autocomplete="off" placeholder="请输入角色名称"></el-input>
  78. </el-form-item>
  79. </el-form>
  80. <div slot="footer" class="dialog-footer">
  81. <span v-if="!addState" style="color:#f00;float:left;margin-left:60px;">初始密码:000000</span>
  82. <el-button @click.native="addFormVisible = false">取消</el-button>
  83. <el-button v-if="addState" type="primary" @click.native="toNext(0)">下一步</el-button>
  84. <el-button v-if="!addState" type="primary" @click.native="toPart(0)">上一步</el-button>
  85. <el-button v-if="!addState" type="primary" @click.native="addSubmit" :loading="addLoading">提交</el-button>
  86. </div>
  87. </el-dialog>
  88. <!--编辑界面-->
  89. <el-dialog title="编辑资产方" v-if="editFormVisible" :visible.sync="editFormVisible" :close-on-click-modal="false" customClass='customWidth'>
  90. <el-form :model="editForm" label-width="100px" :rules="formRules" ref="editForm">
  91. <el-form-item label="资产方名称" prop="companyName">
  92. <el-input v-model="editForm.companyName" autocomplete="off" placeholder="请输入资产方地址"></el-input>
  93. </el-form-item>
  94. <el-form-item label="关联生产方">
  95. <el-select v-model="editForm.companyIds" clearable multiple filterable placeholder="请选择生产方" style="width:533px">
  96. <el-option v-for="item in companys" :key="item.id" :label="item.companyName" :value="item.id">
  97. </el-option>
  98. </el-select>
  99. </el-form-item>
  100. <el-form-item label="资产方地址" prop="companyAddress">
  101. <el-input v-model="editForm.companyAddress" autocomplete="off" placeholder="请输入资产方地址"></el-input>
  102. </el-form-item>
  103. </el-form>
  104. <div slot="footer" class="dialog-footer">
  105. <el-button @click.native="editFormVisible = false">取消</el-button>
  106. <el-button type="primary" @click.native="editSubmit" :loading="editLoading">提交</el-button>
  107. </div>
  108. </el-dialog>
  109. </section>
  110. </template>
  111. <script>
  112. import util from '../../common/js/util'
  113. export default {
  114. data() {
  115. var checkPhone = (rule, value, callback) => {
  116. if (!value) {
  117. return callback(new Error('请输入联系方式'));
  118. } else {
  119. const reg = /^1[0-9]\d{9}$/
  120. if (reg.test(value)) {
  121. callback();
  122. } else {
  123. return callback(new Error('请输入正确的联系方式'));
  124. }
  125. }
  126. };
  127. return {
  128. filters: {
  129. keyName: ''
  130. },
  131. user: JSON.parse(sessionStorage.getItem('user')),
  132. companys:[],
  133. list: [],
  134. total: 0,
  135. page: 1,
  136. size: 20,
  137. listLoading: false,
  138. tableHeight: 0,
  139. formRules: {
  140. companyName: [
  141. { required: true, message: '请输入资产方名称', trigger: 'blur' }
  142. ],
  143. companyAddress: [
  144. { required: true, message: '请输入资产方地址', trigger: 'blur' }
  145. ],
  146. username: [
  147. { required: true, message: '请输入姓名', trigger: 'blur' }
  148. ],
  149. account: [
  150. { required: true, validator: checkPhone, trigger: 'blur'}
  151. ]
  152. },
  153. team: [{label:'资产方',value:0},{label:'生产方',value:1}],
  154. // 新增界面
  155. addFormVisible: false,
  156. addLoading: false,
  157. addState: true,
  158. addTitle: '新增资产方',
  159. addForm: {
  160. companyName: '',
  161. companyAddress: '',
  162. companyIds: [],
  163. username: '',
  164. account: '',
  165. companyId: '',
  166. roleName: "系统管理员",
  167. flag: 0
  168. },
  169. // 编辑界面
  170. editFormVisible: false,
  171. editLoading: false,
  172. editForm: {
  173. id: 0,
  174. companyName: '',
  175. companyType: 0,
  176. companyAddress: '',
  177. companyIds: [],
  178. flag: 1
  179. }
  180. }
  181. },
  182. methods: {
  183. // 分页
  184. handleCurrentChange(val) {
  185. this.page = val;
  186. this.getComp();
  187. },
  188. handleSizeChange(val) {
  189. this.size = val;
  190. this.getComp();
  191. },
  192. //获取基础数据
  193. getMsg() {
  194. this.http.post(this.port.base.relationList, {
  195. companyType: 1
  196. }, res => {
  197. if (res.code == "ok") {
  198. this.companys = res.data;
  199. } else {
  200. this.$message({
  201. message: res.msg,
  202. type: 'error'
  203. });
  204. }
  205. }, error => {
  206. this.$message({
  207. message: error,
  208. type: 'error'
  209. });
  210. })
  211. },
  212. //获取资产方列表
  213. getComp() {
  214. this.listLoading = true;
  215. this.http.post(this.port.base.companyList, {
  216. keyName: this.filters.keyName,
  217. pageNum: this.page,
  218. pageSize: this.size,
  219. companyType: 0
  220. }, res => {
  221. this.listLoading = false;
  222. if (res.code == "ok") {
  223. this.list = res.data.list;
  224. this.total = res.data.total;
  225. } else {
  226. this.$message({
  227. message: res.msg,
  228. type: 'error'
  229. });
  230. }
  231. }, error => {
  232. this.listLoading = false;
  233. this.$message({
  234. message: error,
  235. type: 'error'
  236. });
  237. })
  238. },
  239. toNext(i) {
  240. if(i == 0) {
  241. this.addState = false;
  242. this.addTitle = '新增资产方管理员';
  243. }
  244. },
  245. toPart(i) {
  246. if(i == 0) {
  247. this.addState = true;
  248. this.addTitle = '新增资产方';
  249. }
  250. },
  251. //显示新增界面
  252. handleAdd() {
  253. this.addFormVisible = true;
  254. this.addState = true;
  255. this.addTitle = '新增资产方';
  256. this.addForm = {
  257. companyName: '',
  258. companyAddress: '',
  259. companyIds: [],
  260. username: '',
  261. account: '',
  262. companyId: '',
  263. roleName: "系统管理员",
  264. flag: 0
  265. };
  266. },
  267. //新增
  268. addSubmit() {
  269. this.$refs.addForm.validate((valid) => {
  270. if (valid) {
  271. this.addLoading = true;
  272. var str = "";
  273. for(var i in this.addForm.companyIds){
  274. if(i == this.addForm.companyIds.length-1){
  275. str += this.addForm.companyIds
  276. } else {
  277. str += this.addForm.companyIds + ","
  278. }
  279. }
  280. this.http.post(this.port.base.addCompany, {
  281. companyName: this.addForm.companyName,
  282. companyType: 0,
  283. companyAddress: this.addForm.companyAddress,
  284. companyIds: str,
  285. flag: 0
  286. } , res => {
  287. if (res.code == "ok") {
  288. this.addPeo(res.data.id);
  289. } else {
  290. this.$message({
  291. message: res.msg,
  292. type: 'error'
  293. });
  294. }
  295. }, error => {
  296. this.addLoading = false;
  297. this.addFormVisible = false;
  298. this.$message({
  299. message: error,
  300. type: 'error'
  301. });
  302. })
  303. }
  304. });
  305. },
  306. //添加人员
  307. addPeo(companyId) {
  308. this.$refs.addForm.validate((valid) => {
  309. if (valid) {
  310. this.http.post(this.port.project.addUser, {
  311. username: this.addForm.username,
  312. account: this.addForm.account,
  313. companyId: companyId,
  314. roleName: this.addForm.roleName,
  315. parentId: this.user.id,
  316. addType: 0,
  317. flag: 0
  318. } , res => {
  319. this.addLoading = false;
  320. if (res.code == "ok") {
  321. this.addFormVisible = false;
  322. this.$message({
  323. message: '创建成功',
  324. type: 'success'
  325. });
  326. this.getComp();
  327. } else {
  328. this.$message({
  329. message: res.msg,
  330. type: 'error'
  331. });
  332. }
  333. }, error => {
  334. this.addLoading = false;
  335. this.addFormVisible = false;
  336. this.$message({
  337. message: error,
  338. type: 'error'
  339. });
  340. })
  341. }
  342. });
  343. },
  344. //删除
  345. handleDel(index, row) {
  346. this.$confirm('确认删除该资产方吗?', '提示', {
  347. type: 'warning'
  348. }).then(() => {
  349. this.http.post(this.port.base.delCompany, {
  350. id: row.id
  351. }, res => {
  352. if (res.code == "ok") {
  353. this.$message({
  354. message: '删除成功',
  355. type: 'success'
  356. });
  357. this.getComp();
  358. } else {
  359. this.$message({
  360. message: res.msg,
  361. type: 'error'
  362. });
  363. }
  364. }, error => {
  365. this.$message({
  366. message: error,
  367. type: 'error'
  368. });
  369. })
  370. });
  371. },
  372. //显示编辑界面
  373. handleEdit(index, row) {
  374. this.editFormVisible = true;
  375. var array = [];
  376. for(var i in row.relateCompanyList) {
  377. array.push(row.relateCompanyList[i].id)
  378. }
  379. this.editForm = {
  380. id: row.id,
  381. companyName: row.companyName,
  382. companyType: 0,
  383. companyAddress: row.companyAddress,
  384. companyIds: array,
  385. flag: 1
  386. };
  387. },
  388. //编辑
  389. editSubmit() {
  390. this.$refs.editForm.validate((valid) => {
  391. if (valid) {
  392. this.editLoading = true;
  393. var str = "";
  394. for(var i in this.editForm.companyIds){
  395. if(i == this.editForm.companyIds.length-1){
  396. str += this.editForm.companyIds
  397. } else {
  398. str += this.editForm.companyIds + ","
  399. }
  400. }
  401. this.http.post(this.port.base.addCompany, {
  402. id: this.editForm.id,
  403. companyName: this.editForm.companyName,
  404. companyType: 0,
  405. companyAddress: this.editForm.companyAddress,
  406. companyIds: str,
  407. flag: 1
  408. } , res => {
  409. this.editLoading = false;
  410. if (res.code == "ok") {
  411. this.editFormVisible = false;
  412. this.$message({
  413. message: '修改成功',
  414. type: 'success'
  415. });
  416. this.getComp();
  417. } else {
  418. this.$message({
  419. message: res.msg,
  420. type: 'error'
  421. });
  422. }
  423. }, error => {
  424. this.editLoading = false;
  425. this.editFormVisible = false;
  426. this.$message({
  427. message: error,
  428. type: 'error'
  429. });
  430. })
  431. }
  432. });
  433. }
  434. },
  435. created() {
  436. let height = window.innerHeight;
  437. this.tableHeight = height - 210;
  438. const that = this;
  439. window.onresize = function temp() {
  440. that.tableHeight = window.innerHeight - 210;
  441. };
  442. },
  443. mounted() {
  444. this.getMsg();
  445. this.getComp();
  446. }
  447. }
  448. </script>
  449. <style scoped>
  450. </style>