index.vue 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. <template>
  2. <template-page
  3. v-if="pageShow"
  4. ref="pageRef"
  5. :get-list="getList"
  6. :exportList="exportList"
  7. :table-attributes="tableAttributes"
  8. :table-events="tableEvents"
  9. :options-evens-group="optionsEvensGroup"
  10. :moreParameters="moreParameters"
  11. :column-parsing="columnParsing"
  12. :operation="operation()"
  13. key="pageType"
  14. >
  15. <div class="cartographer_big">
  16. <el-dialog
  17. title="设置师傅组别"
  18. width="100%"
  19. :modal="false"
  20. :visible.sync="formDialog"
  21. :before-close="handleClose"
  22. >
  23. <zj-page-container>
  24. <zj-page-fill>
  25. <div style="box-sizing: border-box; padding: 20px 20px 0 20px">
  26. <zj-form-container ref="formRef" :form-data="formData" :form-attributes="{ size: 'mini' }">
  27. <zj-form-module title="师傅组" label-width="100px" :form-data="formData" :form-items="formItems">
  28. </zj-form-module>
  29. </zj-form-container>
  30. </div>
  31. </zj-page-fill>
  32. <div style="text-align: right; box-sizing: border-box; padding: 16px 20px">
  33. <el-button size="mini" @click="handleClose">取消</el-button>
  34. <el-button size="mini" type="primary" @click="save">保存</el-button>
  35. </div>
  36. </zj-page-container>
  37. </el-dialog>
  38. </div>
  39. </template-page>
  40. </template>
  41. <script>
  42. import TemplatePage from '@/components/template/template-page-1.vue'
  43. import import_mixin from '@/components/template/import_mixin.js'
  44. import operation_mixin from '@/components/template/operation_mixin.js'
  45. import {
  46. workerTeamList,
  47. workerTeamListExport,
  48. workerTeamAdd,
  49. workerTeamUpdate,
  50. workerTeamImport,
  51. workerTeamQueryWebsitWorker,
  52. workerTeamDel
  53. } from '@/api/masterGroup.js'
  54. import { commonTemplateDownload } from '@/api/common.js'
  55. import { getWebsit } from '@/api/customerManagement.js'
  56. import { required, requiredValueMin } from '@/components/template/rules_verify.js'
  57. export default {
  58. components: { TemplatePage },
  59. mixins: [import_mixin, operation_mixin],
  60. data() {
  61. return {
  62. pageType: 'list',
  63. pageShow: true,
  64. // 表格属性
  65. tableAttributes: {
  66. // 启用勾选列
  67. selectColumn: false
  68. },
  69. // 表格事件
  70. tableEvents: {
  71. 'selection-change': this.selectionChange
  72. },
  73. // 勾选选中行
  74. recordSelected: [],
  75. /** 表单变量 */
  76. formDialog: false,
  77. formData: {
  78. assistantWorkerId: '',
  79. assistantWorkerName: '',
  80. companyWechatId: '',
  81. companyWechatName: '',
  82. masterWorkerId: '',
  83. masterWorkerName: '',
  84. status: 'ON',
  85. websitId: ''
  86. },
  87. websitList: [],
  88. workerTeamQueryWebsitWorkerList: []
  89. }
  90. },
  91. computed: {
  92. // 事件组合
  93. optionsEvensGroup() {
  94. return [
  95. [
  96. [
  97. this.optionsEvensAuth('add', {
  98. click: this.openForm
  99. })
  100. ]
  101. ],
  102. [
  103. [
  104. this.optionsEvensAuth('import', ({ moduleName }) => {
  105. return {
  106. name: moduleName,
  107. render: () => {
  108. return this.importButton(workerTeamImport, moduleName)
  109. }
  110. }
  111. })
  112. ],
  113. [
  114. this.optionsEvensAuth('template', {
  115. click: () => {
  116. commonTemplateDownload({ name: '师傅组队导入模板.xlsx' }, `${this.$route.meta.title}`)
  117. .then(res => {
  118. this.$message({
  119. message: '下载成功',
  120. type: 'success'
  121. })
  122. })
  123. .catch(err => {
  124. this.$message.error('下载失败')
  125. })
  126. }
  127. })
  128. ]
  129. ]
  130. ]
  131. },
  132. // 更多参数
  133. moreParameters() {
  134. return []
  135. },
  136. formItems() {
  137. return [
  138. {
  139. name: 'el-select',
  140. md: 12,
  141. options: this.websitList.map(item => ({ label: `(${item.websitId})${item.name}`, value: item.websitId })),
  142. attributes: {
  143. clearable: true,
  144. filterable: true,
  145. disabled: false,
  146. placeholder: '请输入'
  147. },
  148. formItemAttributes: {
  149. label: '所属网点',
  150. prop: 'websitId',
  151. rules: [...required]
  152. },
  153. events: {
  154. change: val => {
  155. this.formData.masterWorkerId = ''
  156. this.formData.masterWorkerName = ''
  157. this.formData.assistantWorkerId = ''
  158. this.formData.assistantWorkerName = ''
  159. this.workerTeamQueryWebsitWorkerList = []
  160. if (val) {
  161. workerTeamQueryWebsitWorker({ websitId: val }).then(res => {
  162. this.workerTeamQueryWebsitWorkerList = res.data
  163. })
  164. }
  165. }
  166. }
  167. },
  168. {
  169. name: 'el-select',
  170. md: 12,
  171. options: this.workerTeamQueryWebsitWorkerList.map(item => ({
  172. label: item.workerNumber ? `(${item.workerNumber})${item.workerName}` : item.workerName,
  173. value: item.workerId,
  174. disabled: item.workerId == this.formData.assistantWorkerId
  175. })),
  176. // .filter(item => item.workerId != this.formData.assistantWorkerId)
  177. attributes: {
  178. clearable: true,
  179. filterable: true,
  180. placeholder: '请输入',
  181. disabled: !this.formData.websitId
  182. },
  183. formItemAttributes: {
  184. label: '选择大工',
  185. prop: 'masterWorkerId',
  186. rules: [...required]
  187. },
  188. events: {
  189. change: val => {
  190. this.formData.masterWorkerName = this.workerTeamQueryWebsitWorkerList?.find(
  191. item => item.workerId === val
  192. )?.workerName
  193. }
  194. }
  195. },
  196. {
  197. name: 'el-select',
  198. md: 12,
  199. options: this.workerTeamQueryWebsitWorkerList.map(item => ({
  200. label: item.workerNumber ? `(${item.workerNumber})${item.workerName}` : item.workerName,
  201. value: item.workerId,
  202. disabled: item.workerId == this.formData.masterWorkerId
  203. })),
  204. //.filter(item => item.workerId != this.formData.masterWorkerId)
  205. attributes: {
  206. clearable: true,
  207. filterable: true,
  208. placeholder: '请输入',
  209. disabled: !this.formData.masterWorkerId
  210. },
  211. formItemAttributes: {
  212. label: '选择小工',
  213. prop: 'assistantWorkerId',
  214. rules: [...required]
  215. },
  216. events: {
  217. change: val => {
  218. this.formData.assistantWorkerName = this.workerTeamQueryWebsitWorkerList?.find(
  219. item => item.workerId === val
  220. )?.workerName
  221. }
  222. }
  223. },
  224. {
  225. md: 12,
  226. isShow: true,
  227. name: 'el-radio',
  228. options: [
  229. { label: '有效', value: 'ON' },
  230. { label: '无效', value: 'OFF' }
  231. ],
  232. attributes: {},
  233. formItemAttributes: {
  234. label: '状态',
  235. prop: 'status',
  236. rules: [...required]
  237. }
  238. }
  239. ]
  240. }
  241. },
  242. methods: {
  243. // 列表请求函数
  244. getList: workerTeamList,
  245. // 列表导出函数
  246. exportList: workerTeamListExport,
  247. // 表格列解析渲染数据更改
  248. columnParsing(item, defaultData) {
  249. return defaultData
  250. },
  251. // 监听勾选变化
  252. selectionChange(data) {
  253. this.recordSelected = data
  254. },
  255. // 打开创建弹窗
  256. openForm() {
  257. Promise.all([getWebsit({ type: 'C', status: true })]).then(([res1]) => {
  258. this.websitList = res1.data
  259. this.formDialog = true
  260. })
  261. },
  262. // 打开详情弹窗
  263. openDetailForm(row) {
  264. Promise.all([
  265. getWebsit({ type: 'C', status: true }),
  266. workerTeamQueryWebsitWorker({ websitId: row.websitId })
  267. ]).then(([res1, res2]) => {
  268. this.websitList = res1.data
  269. this.workerTeamQueryWebsitWorkerList = res2.data
  270. this.formData = { ...row }
  271. this.formDialog = true
  272. })
  273. },
  274. handleClose() {
  275. this.$refs?.formRef?.resetFields()
  276. this.$data.formData = this.$options.data().formData
  277. this.formDialog = false
  278. },
  279. // 操作按钮
  280. operation() {
  281. return this.operationBtn({
  282. edit: {
  283. click: ({ row, index, column }) => {
  284. this.openDetailForm(row)
  285. }
  286. },
  287. del: {
  288. prompt: '是否确定删除?',
  289. click: ({ row, index, column }) => {
  290. workerTeamDel([row.id]).then(res => {
  291. this.$refs.pageRef.refreshList()
  292. this.$message({
  293. type: 'success',
  294. message: '删除成功'
  295. })
  296. })
  297. }
  298. }
  299. })
  300. },
  301. // 保存
  302. save() {
  303. this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
  304. if (valid) {
  305. ;(this.formData?.id ? workerTeamUpdate : workerTeamAdd)(this.formData).then(res => {
  306. this.$message({
  307. type: 'success',
  308. message: '保存成功'
  309. })
  310. this.handleClose()
  311. this.$refs.pageRef.refreshList()
  312. })
  313. }
  314. })
  315. }
  316. }
  317. }
  318. </script>
  319. <style lang="scss" scoped></style>