cloud_developer.vue 7.2 KB

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