cloud_developer.vue 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. <template>
  2. <view id="cloud-devaloper">
  3. <!-- <el-button @click="goAddVer">添加认证</el-button> -->
  4. <z-table :data="tableData" :keys="tableProps" :labels="tableHeaders" />
  5. <!-- <el-dialog title="收货地址" :visible.sync="dialogFormVisible">
  6. <el-form :model="form" :rules="rules" ref="roleForm">
  7. <el-form-item label="用户 UID" label-width="120px" prop="uid">
  8. <el-input v-model="form.uid"></el-input>
  9. </el-form-item>
  10. <el-form-item label="培训状态" label-width="120px" prop="train_state">
  11. <el-select v-model="form.train_state" placeholder="请选择培训状态">
  12. <el-option v-for="(state, index) of states" :key="index" :label="state" :value="index"/>
  13. </el-select>
  14. </el-form-item>
  15. <el-form-item label="自由职业" label-width="120px" prop="freelancer">
  16. <el-select v-model="form.freelancer" placeholder="请选择自由职业状态">
  17. <el-option label="是" :value="1"></el-option>
  18. <el-option label="否" :value="0"></el-option>
  19. </el-select>
  20. </el-form-item>
  21. <el-form-item label="备注" label-width="120px">
  22. <el-input v-model="form.note" type="textarea"></el-input>
  23. </el-form-item>
  24. </el-form>
  25. <div slot="footer" class="dialog-footer">
  26. <el-button @click="dialogFormVisible = false">取 消</el-button>
  27. <el-button type="primary" @click="addVer('roleForm')">确 定</el-button>
  28. </div>
  29. </el-dialog>
  30. <el-pagination
  31. @current-change="changePagination"
  32. :current-page.sync="currentPage"
  33. :page-size="20"
  34. layout="total, prev, pager, next"
  35. :total="totalCount"
  36. :pager-count="7"
  37. ></el-pagination> -->
  38. </view>
  39. </template>
  40. <script>
  41. import tableMixin from '../mixins/table'
  42. const tableHeaders = [
  43. "ID",
  44. "昵称",
  45. "自由职业",
  46. "最低时长",
  47. "当前状态",
  48. "职业方向",
  49. "技能",
  50. "城市",
  51. "工龄",
  52. "接单情况",
  53. "认证时间",
  54. "备注",
  55. "操作"
  56. ]
  57. const tableProps = [
  58. "uid",
  59. "nickname",
  60. "freelancer",
  61. "cloud_job_min_work_time",
  62. "on_projectShow",
  63. "direction_name",
  64. "skillStr",
  65. "city_name",
  66. "work_year_op",
  67. "countDevelopProjectStr",
  68. "cloud_job_verify_timeStr",
  69. "cloud_job_verify_note",
  70. "ctrl"
  71. ]
  72. const apis = {
  73. getTrainStates: `/api/admin/common/get_cloud_job_verify_train_state`,
  74. delete: `/api/admin/user/cancel_cloud_verify`,
  75. addVer: `/api/admin/user/add_cloud_verify`,
  76. dataList: `/api/admin/user/get_cloud_verify_list`,
  77. }
  78. // 获取当前状态
  79. const getOnProjectShow = i => {
  80. let str = ''
  81. if(i.on_project === 0 && i.on_hire === 0 & i.on_job === 0 && i.work_status === 1) str = '空闲'
  82. else {
  83. if(i.on_project) str = '项目'
  84. else if(i.on_hire) str = '雇佣'
  85. else if(i.on_job) str = '云端'
  86. else if(!i.work_status) str = '不接单'
  87. }
  88. return str
  89. }
  90. export default {
  91. mixins: [tableMixin],
  92. data() {
  93. return {
  94. // 培训状态
  95. states: [],
  96. // 表单验证
  97. rules: {
  98. uid: [
  99. { required: true, message: '请输入 UID', trigger: 'blur' },
  100. ],
  101. train_state: [
  102. { required: true, message: '请选择活动区域', trigger: 'change' }
  103. ],
  104. freelancer: [
  105. { required: true, message: '请选择活动区域', trigger: 'change' }
  106. ],
  107. // note: [
  108. // { required: true, message: '请输入备注', trigger: 'blur' },
  109. // ],
  110. },
  111. // 表单
  112. form: {},
  113. // 显示 dislog
  114. dialogFormVisible: false,
  115. // 筛选状态
  116. statuses: [],
  117. // 数据总条目
  118. totalCount: 0,
  119. currentPage: 1,
  120. // 列表头显示内容
  121. tableHeaders,
  122. // 列表头字段
  123. tableProps,
  124. // 列表数据
  125. tableData: []
  126. }
  127. },
  128. mounted() {
  129. this.getTableData()
  130. this.getTrainStates()
  131. },
  132. methods: {
  133. // 点击认证提交
  134. addVer(formName) {
  135. this.$refs[formName].validate(async (valid) => {
  136. if(valid) {
  137. await this.$post(apis.addVer, this.form)
  138. this.dialogFormVisible = false
  139. this.getTableData()
  140. } else {
  141. return false
  142. }
  143. })
  144. },
  145. // 点击删除
  146. clickDelete(uid) {
  147. this.$confirm(`确认删除 uid 为${uid}?`)
  148. .then(async _ => {
  149. await this.$post(apis.delete, {
  150. uid
  151. })
  152. this.getTableData()
  153. })
  154. .catch(_ => { })
  155. },
  156. // 添加认证
  157. goAddVer() {
  158. this.dialogFormVisible = true
  159. },
  160. // 点击详情
  161. clickDetail(uid) {
  162. window.open(`/rooter/user/${uid}`)
  163. },
  164. // 根据状态显示图表样式
  165. tableRowClassName({
  166. row,
  167. rowIndex
  168. }) {
  169. // console.log({row, rowIndex})
  170. let className = ""
  171. if(row.status === "1") className = "success-row"
  172. return className
  173. },
  174. // 格式化列表数据
  175. formatTableData(data, resData) {
  176. const userSkills = resData.userSkills
  177. return data.map(i => {
  178. const uid = i.uid
  179. const countDevelopProject = (resData.countDevelopProject[uid] || 0) + (resData.countManageProject[uid] || 0)
  180. const countHire = resData.countHire[uid] || 0
  181. const countJob = resData.countJob[uid] || 0
  182. const cloudJobVerifyTime = i.cloud_job_verify_time * 1000
  183. return {
  184. ...i,
  185. on_projectShow: getOnProjectShow(i),
  186. skillStr: userSkills[i.uid].join(','),
  187. countDevelopProjectStr: `项目:${countDevelopProject},雇佣:${countHire},云端:${countJob}`,
  188. cloud_job_verify_timeStr: cloudJobVerifyTime > 0 ? new Date(cloudJobVerifyTime).toLocaleDateString() : '--',
  189. ctrl: "删除"
  190. }
  191. })
  192. },
  193. // 页码变动
  194. changePagination(page) {
  195. this.getTableData()
  196. },
  197. // 获取培训状态列表
  198. async getTrainStates() {
  199. const res = await this.$post(apis.getTrainStates)
  200. if(res) {
  201. // console.log(res.data)
  202. this.states = res.data
  203. }
  204. },
  205. // 获取列表数据
  206. async getTableData(status = 0) {
  207. const p = this.currentPage
  208. const res = await this.$post(apis.dataList, {
  209. p
  210. })
  211. // console.log(res.data.data)
  212. const data = res.data.data
  213. const list = data.list
  214. this.tableData = this.formatTableData(list, data)
  215. this.totalCount = Number(data.total)
  216. this.totalPage = data.totalPage
  217. }
  218. }
  219. }
  220. </script>
  221. <style lang="less" scoped>
  222. #cloud-devaloper {
  223. .table {
  224. height: 100%;
  225. height: calc(100% - 80px);
  226. }
  227. }
  228. </style>