index.vue 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. <template>
  2. <div>
  3. <template-page
  4. v-if="!isShowMemberDetail"
  5. ref="pageRef"
  6. :get-list="getList"
  7. :table-attributes="tableAttributes"
  8. :table-events="tableEvents"
  9. :operationColumnWidth="200"
  10. :options-evens-group="optionsEvensGroup"
  11. :moreParameters="moreParameters"
  12. :column-parsing="columnParsing"
  13. :operation="operation()"
  14. :exportList="exportList"
  15. >
  16. <el-dialog
  17. title=""
  18. width="500px"
  19. custom-class="diy-dialog"
  20. append-to-body
  21. :modal="true"
  22. :visible.sync="formDialog"
  23. :show-close="true"
  24. :close-on-click-modal="false"
  25. :modal-append-to-body="false"
  26. :before-close="formCancel"
  27. >
  28. <zj-form-container ref="formRef" :form-data="formData" :styleSwitch="false">
  29. <zj-form-module
  30. :title="formDialogTitles[formDialogType]"
  31. label-width="100px"
  32. :showPackUp="false"
  33. :form-data="formData"
  34. :form-items="formItems"
  35. >
  36. </zj-form-module>
  37. </zj-form-container>
  38. <div slot="footer" class="dialog-footer">
  39. <el-button size="mini" @click="formCancel">取 消</el-button>
  40. <el-button size="mini" @click="formConfirm" type="primary">确 定</el-button>
  41. </div>
  42. </el-dialog>
  43. <!-- 入驻网点 -->
  44. <el-dialog
  45. title="设为工程师"
  46. :visible.sync="dialogVisible"
  47. @close="websitList = []"
  48. width="40%"
  49. :close-on-click-modal="false"
  50. :modal-append-to-body="false"
  51. >
  52. <el-form ref="workerForm" :model="workerForm" label-width="110px" size="small" label-position="left">
  53. <el-row :gutter="20">
  54. <el-col :span="24">
  55. <el-form-item label="入驻网点" :required="true">
  56. <el-select v-model="workerForm.websitId" placeholder="请选择" style="width: 100%">
  57. <el-option v-for="item in websitList" :key="item.websitId" :label="item.name" :value="item.websitId">
  58. </el-option>
  59. </el-select>
  60. </el-form-item>
  61. </el-col>
  62. <el-col :span="24">
  63. <el-form-item label="姓名" :required="true">
  64. <el-input v-model="workerForm.name" placeholder="请输入"></el-input>
  65. </el-form-item>
  66. </el-col>
  67. <el-col :span="24">
  68. <el-form-item label="银行卡号">
  69. <el-input v-model="workerForm.bankAccount" placeholder="请输入"></el-input>
  70. </el-form-item>
  71. </el-col>
  72. <el-col :span="24">
  73. <el-form-item label="身份证号码" :required="true">
  74. <el-input v-model="workerForm.idCard" placeholder="请输入"></el-input>
  75. </el-form-item>
  76. </el-col>
  77. <el-col :span="24">
  78. <el-form-item label="身份证正面照" :required="true">
  79. <ImageUpload :fileList="fileList" :limit="1" :isEdit="true" />
  80. </el-form-item>
  81. </el-col>
  82. <el-col :span="24" v-for="(item, index) in imgList" :key="index">
  83. <el-form-item :label="item.dictValue" :required="true">
  84. <ImageUpload :fileList="item.imgs" :limit="1" :isEdit="true" />
  85. </el-form-item>
  86. </el-col>
  87. </el-row>
  88. </el-form>
  89. <div slot="footer" class="dialog-footer">
  90. <el-button @click="dialogVisible = false">取 消</el-button>
  91. <el-button type="primary" @click="memberInner()">确定</el-button>
  92. </div>
  93. </el-dialog>
  94. </template-page>
  95. <div class="detail" v-if="isShowMemberDetail">
  96. <MemberDetail :user="queryUser" @backListFromDetail="backListFromMemberDetail" />
  97. </div>
  98. </div>
  99. </template>
  100. <script>
  101. import TemplatePage from '@/components/template/template-page-1.vue'
  102. import import_mixin from '@/components/template/import_mixin.js'
  103. import ImageUpload from '@/components/file-upload'
  104. import { required, mobileRequired, mobile } from '@/components/template/rules_verify.js'
  105. import { memberListPageV2, memberPageExport, memberAudit, memberInner, getWebsit } from '@/api/customerManagement'
  106. import MemberDetail from '@/components/Mall/Member/member-detail'
  107. import request from '@/utils/request'
  108. import operation_mixin from '@/components/template/operation_mixin.js'
  109. export default {
  110. components: { TemplatePage, MemberDetail, ImageUpload },
  111. mixins: [import_mixin, operation_mixin],
  112. data() {
  113. return {
  114. // 事件组合
  115. optionsEvensGroup: [],
  116. // 表格属性
  117. tableAttributes: {
  118. // 启用勾选列
  119. selectColumn: false
  120. },
  121. // 表格事件
  122. tableEvents: {
  123. 'selection-change': this.selectionChange
  124. },
  125. // 勾选选中行
  126. recordSelected: [],
  127. /** 表单变量 */
  128. formDialogType: 0,
  129. formDialogTitles: [],
  130. formDialog: false,
  131. dialogVisible: false,
  132. formData: {
  133. storageName: '',
  134. storageMobile: '',
  135. storageAddress: ''
  136. },
  137. websitList: [],
  138. workerForm: {
  139. websitId: '',
  140. userId: '',
  141. idCard: '',
  142. name: '',
  143. bankAccount: ''
  144. },
  145. queryUser: {}, // 查询
  146. fileList: [],
  147. imgList: []
  148. }
  149. },
  150. computed: {
  151. // 更多参数
  152. moreParameters() {
  153. return []
  154. },
  155. formItems() {},
  156. isShowMemberDetail() {
  157. return this.queryUser.hasOwnProperty('userId')
  158. }
  159. },
  160. created() {
  161. this.getImgList()
  162. },
  163. methods: {
  164. // 列表请求函数
  165. getList: memberListPageV2,
  166. // 列表导出函数
  167. exportList: memberPageExport,
  168. // 表格列解析渲染数据更改
  169. columnParsing(item, defaultData) {
  170. return defaultData
  171. },
  172. // 监听勾选变化
  173. selectionChange(data) {
  174. this.recordSelected = data
  175. },
  176. // 详情返回显示列表
  177. backListFromMemberDetail() {
  178. this.queryUser = {}
  179. },
  180. getImgList() {
  181. request({
  182. url: `/dictCompany/page`,
  183. method: 'post',
  184. data: { pageNum: 1, pageSize: -1, params: [{ param: 'a.dict_type', compare: '=', value: 'WORKER_IMG' }] }
  185. }).then(res => {
  186. this.imgList = res.data.records.filter(item => {
  187. return (item.imgs = [])
  188. })
  189. })
  190. },
  191. // 表格操作列
  192. operation() {
  193. return this.operationBtn({
  194. detail: {
  195. btnType: 'text',
  196. click: ({ row, index, column }) => {
  197. this.queryUser = row
  198. }
  199. },
  200. setWorker: {
  201. btnType: 'text',
  202. prompt: '请确认是否设为工程师?',
  203. click: ({ row, index, column }) => {
  204. this.workerForm.userId = row.userId
  205. getWebsit({ type: 'C' }).then(res => {
  206. this.websitList = res.data
  207. this.dialogVisible = true
  208. })
  209. }
  210. },
  211. setService: {
  212. btnType: 'text',
  213. prompt: '请确认是否设为分销员?',
  214. click: ({ row, index, column }) => {
  215. memberInner({
  216. type: 'SERVICE',
  217. userId: row.userId
  218. }).then(res => {
  219. if (res.code == 200) {
  220. this.$message({ type: 'success', message: '设为分销员成功!' })
  221. this.$refs.pageRef.refreshList()
  222. } else {
  223. this.$message.error(res.msg)
  224. }
  225. })
  226. }
  227. }
  228. })
  229. },
  230. addData() {
  231. this.formDialogType = 0
  232. this.openForm()
  233. },
  234. openForm() {
  235. this.formDialog = true
  236. },
  237. formCancel() {
  238. this.$refs.formRef.$refs.inlineForm.clearValidate()
  239. this.$data.formData = this.$options.data().formData
  240. this.formDialog = false
  241. },
  242. memberInner() {
  243. let workerImgs = []
  244. for (var i = 0; i < this.imgList.length; i++) {
  245. if (this.imgList[i].imgs.length == 0) {
  246. return this.$message({ type: 'error', message: '请上传' + this.imgList[i].dictValue + '!' })
  247. break
  248. } else {
  249. workerImgs.push({
  250. imgName: this.imgList[i].dictValue,
  251. imgUrl: this.imgList[i].imgs.length > 0 ? this.imgList[i].imgs[0].url : ''
  252. })
  253. }
  254. }
  255. if (!this.workerForm.websitId) {
  256. return this.$message({ type: 'error', message: '请选择入驻网点!' })
  257. } else if (!this.workerForm.name) {
  258. return this.$message({ type: 'error', message: '请输入姓名!' })
  259. } else if (!this.workerForm.idCard) {
  260. return this.$message({ type: 'error', message: '请输入身份证号码!' })
  261. } else if (!/^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}[\dXx]$/g.test(this.workerForm.idCard)) {
  262. return this.$message({ type: 'error', message: '请输入正确的身份证号码!' })
  263. } else if (this.fileList.length == 0) {
  264. return this.$message({ type: 'error', message: '请上传身份证正面照!' })
  265. }
  266. memberInner({
  267. type: 'WORKER',
  268. userId: this.workerForm.userId,
  269. websitId: this.workerForm.websitId,
  270. name: this.workerForm.name,
  271. idCard: this.workerForm.idCard,
  272. bankAccount: this.workerForm.bankAccount,
  273. idCardImg: this.fileList.map(item => item.url).join(','),
  274. workerImgs
  275. }).then(res => {
  276. this.dialogVisible = false
  277. this.$message({ type: 'success', message: '设置工程师成功!' })
  278. this.$refs.pageRef.refreshList()
  279. })
  280. },
  281. formConfirm() {
  282. this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
  283. if (valid) {
  284. ;[addMember, editMember][this.formDialogType](this.formData).then(res => {
  285. this.$message({ type: 'success', message: `${this.formDialogTitles[this.formDialogType]}成功!` })
  286. this.formCancel()
  287. this.$refs.pageRef.refreshList()
  288. })
  289. }
  290. })
  291. }
  292. }
  293. }
  294. </script>
  295. <style lang="scss" scoped>
  296. .detail {
  297. padding: 20px;
  298. box-sizing: border-box;
  299. }
  300. </style>