install.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. <template>
  2. <template-page ref="pageRef" :get-list="getList" :table-attributes="tableAttributes" :table-events="tableEvents" :operationColumnWidth="80"
  3. :options-evens-group="optionsEvensGroup" :moreParameters="moreParameters" :column-parsing="columnParsing"
  4. :operation="operation" :exportList="exportList" :replaceOrNotMap="true">
  5. </template-page>
  6. </template>
  7. <script>
  8. import TemplatePage from '@/components/template/template-page-1.vue'
  9. import import_mixin from '@/components/template/import_mixin.js'
  10. import ImageUpload from '@/components/file-upload'
  11. import { required, mobileRequired, mobile, httpUrl, email } from '@/components/template/rules_verify.js'
  12. import { listPageV2,pageExport, add, edit, del, getMainList, getTypeList } from "@/api/workOrder/settlementStandardInstall";
  13. export default {
  14. components: { TemplatePage, ImageUpload },
  15. mixins: [import_mixin],
  16. data() {
  17. return {
  18. // 事件组合
  19. optionsEvensGroup: [
  20. [
  21. [
  22. {
  23. name: '新建',
  24. click: this.addData
  25. }
  26. ],
  27. ],
  28. ],
  29. // 表格属性
  30. tableAttributes: {
  31. // 启用勾选列
  32. selectColumn: false
  33. },
  34. // 表格事件
  35. tableEvents: {
  36. 'selection-change': this.selectionChange
  37. },
  38. // 勾选选中行
  39. recordSelected: [],
  40. /** 表单变量 */
  41. formDialogType: 0,
  42. formDialogTitles: ["新增","编辑", "详情"],
  43. formDialog: false,
  44. formData: {
  45. companyName: JSON.parse(localStorage.getItem('greemall_user')).companyName,
  46. },
  47. editIndex: null,
  48. mainList: [],
  49. smallList: [],
  50. typeList: []
  51. }
  52. },
  53. computed: {
  54. // 更多参数
  55. moreParameters() {
  56. return []
  57. },
  58. formItems() {
  59. return []
  60. }
  61. },
  62. created(){
  63. this.getMainList()
  64. this.getTypeList()
  65. },
  66. methods: {
  67. // 列表请求函数
  68. getList: listPageV2,
  69. getList(p) {
  70. try {
  71. var pam = JSON.parse(JSON.stringify(p))
  72. this.editIndex = null
  73. return listPageV2(pam)
  74. } catch (error) {
  75. console.log(error)
  76. }
  77. },
  78. // 列表导出函数
  79. exportList: pageExport,
  80. // 表格列解析渲染数据更改
  81. columnParsing(item, defaultData) {
  82. if (item.jname === 'typeName') {
  83. defaultData.render = (h, { row, index, column }) => {
  84.   return this.editIndex == index?(
  85. <div class="redbordererr">
  86. <el-form-item prop={`tableData.${index}.types`} rules={[{required: true, message: '工单类型不能为空', trigger: 'blur'}]}>
  87. <el-select value-key="orderSmallTypeText" value={row.types} placeholder="请选择"
  88. onInput={(val)=>{
  89. row.types=val
  90. }}>
  91. {
  92. this.typeList.map((item, index) => {
  93. return <el-option key={item.id} label={item.orderSmallTypeText} value={item}></el-option>
  94. })
  95. }
  96. </el-select>
  97. </el-form-item>
  98. </div>
  99.     ):(<div style="padding: 6px;">{row.typeName}</div>)
  100.   }
  101. }
  102. if (item.jname === 'parentCategoryName') {
  103. defaultData.render = (h, { row, index, column }) => {
  104.   return this.editIndex == index?(
  105. <div class="redbordererr">
  106. <el-form-item prop={`tableData.${index}.parentCategory`} rules={[{required: true, message: '产品大类不能为空', trigger: 'blur'}]}>
  107. <el-select value={row.parentCategory} value-key="name" placeholder="请选择"
  108. onInput={(val)=>{
  109. row.parentCategory=val
  110. this.smallList = [...[{name: '通用', categoryId: 0}],...val.children]
  111. }}>
  112. {
  113. this.mainList.map((item, index) => {
  114. return <el-option key={item.categoryId} label={item.name} value={item}></el-option>
  115. })
  116. }
  117. </el-select>
  118. </el-form-item>
  119. </div>
  120.     ):(<div style="padding: 6px;">{row.parentCategoryName}</div>)
  121.   }
  122. }
  123. if (item.jname === 'categoryName') {
  124. defaultData.render = (h, { row, index, column }) => {
  125.   return this.editIndex == index? (
  126. <div class="redbordererr">
  127. <el-form-item prop={`tableData.${index}.category`} rules={[{required: true, message: '产品小类不能为空', trigger: 'blur'}]}>
  128. <el-select value={row.category} value-key="name" placeholder="请选择"
  129. onInput={(val)=>{
  130. row.category=val
  131. }}>
  132. {
  133. this.smallList.map((item, index) => {
  134. return <el-option key={item.id} label={item.name} value={item}></el-option>
  135. })
  136. }
  137. </el-select>
  138. </el-form-item>
  139. </div>
  140.     ):(<div style="padding: 6px;">{row.categoryName}</div>)
  141.   }
  142. }
  143. if (item.jname === 'label') {
  144. defaultData.render = (h, { row, index, column }) => {
  145.   return this.editIndex == index? (
  146. <div class="redbordererr">
  147. <el-form-item prop={`tableData.${index}.label`} rules={[{required: true, message: '功率不能为空', trigger: 'blur'}]}>
  148. <el-input type="text" value={row.label} placeholder="请输入"
  149. onInput={(val)=>{
  150. row.label=val
  151. }}>
  152. </el-input>
  153. </el-form-item>
  154. </div>
  155.     ):(<div style="padding: 6px;">{row.label}</div>)
  156.   }
  157. }
  158. if (item.jname === 'normAmount') {
  159. defaultData.render = (h, { row, index, column }) => {
  160.   return this.editIndex == index? (
  161. <div class="redbordererr">
  162. <el-form-item prop={`tableData.${index}.normAmount`} rules={[{required: true, message: '结算标准不能为空', trigger: 'blur'}]}>
  163. <el-input type="text" value={row.normAmount} placeholder="请输入"
  164. onInput={(val)=>{
  165. row.normAmount=val
  166. }}>
  167. </el-input>
  168. </el-form-item>
  169. </div>
  170.     ):(<div style="padding: 6px;">{row.normAmount}</div>)
  171.   }
  172. }
  173. if (item.jname === 'remark') {
  174. defaultData.render = (h, { row, index, column }) => {
  175.   return this.editIndex == index? (
  176. <div class="redbordererr">
  177. <el-form-item prop={`tableData.${index}.remark`}>
  178. <el-input type="text" value={row.remark} placeholder="请输入"
  179. onInput={(val)=>{
  180. row.remark=val
  181. }}>
  182. </el-input>
  183. </el-form-item>
  184. </div>
  185.     ):(<div style="padding: 6px;">{row.remark}</div>)
  186.   }
  187. defaultData.columnAttributes.width = 200
  188. }
  189. return defaultData
  190. },
  191. // 监听勾选变化
  192. selectionChange(data) {
  193. this.recordSelected = data
  194. },
  195. // 表格操作列
  196. operation(h, { row, index, column }) {
  197. return (
  198. <div class='operation-btns'>
  199. {row.id?<el-button type="text" onClick={() => {
  200. this.$refs.pageRef.tableForm().validate((valid) => {
  201. if (valid) {
  202. if(this.editIndex != index){
  203. row = Object.assign(row,{
  204. types: {orderSmallTypeText: row.typeName,id: row.type},
  205. parentCategory: {name: row.parentCategoryName,categoryId: row.parentCategoryId},
  206. category: {name: row.categoryName,categoryId: row.categoryId},
  207. })
  208. this.mainList.forEach(item =>{
  209. if(item.categoryId == row.parentCategoryId){
  210. this.smallList = [...[{name: '通用', categoryId: 0}],...item.children]
  211. }
  212. })
  213. this.editIndex = index
  214. }else{
  215. this.edit(row)
  216. }
  217. } else {
  218. console.log('error submit!!');
  219. return false;
  220. }
  221. });
  222. }}>{this.editIndex == index?'确定':'编辑'}</el-button>:null}
  223. {!row.id?<el-button type="text" onClick={() => {
  224. this.$refs.pageRef.tableForm().validate((valid) => {
  225. if (valid) {
  226. this.add(row)
  227. } else {
  228. console.log('error submit!!');
  229. return false;
  230. }
  231. });
  232. }}>保存</el-button>:null}
  233. <el-button type="text" style="color: #FF0000" onClick={() => {
  234. row.id?this.$confirm('请确认是否删除该数据, 是否继续?', '提示', {
  235. confirmButtonText: '确定',
  236. cancelButtonText: '取消',
  237. type: 'warning'
  238. }).then(() => {
  239. del({
  240. id: row.id
  241. }).then(res => {
  242. if (res.code == 200) {
  243. this.$message({ type: 'success', message: '删除成功!' })
  244. this.$refs.pageRef.refreshList()
  245. } else {
  246. this.$message.error(res.msg);
  247. }
  248. })
  249. }): this.$refs.pageRef.deleteRowData(0);this.editIndex = null
  250. }}>删除</el-button>
  251. </div>
  252. )
  253. },
  254. getMainList(){
  255. getMainList({type: 2}).then(res => {
  256. this.mainList = [...[{name: '通用', categoryId: 0}],...res.data]
  257. })
  258. },
  259. getTypeList(){
  260. getTypeList({pageNum: 1,pageSize: -1,params: [{param: 'a.order_type',compare: '=',value: 'INSTALL'},{param: 'a.status',compare: '=',value: true}]}).then(res => {
  261. this.typeList = res.data.records
  262. })
  263. },
  264. addData() {
  265. this.$refs.pageRef.tableForm().validate((valid) => {
  266. if (valid) {
  267. this.editIndex = 0
  268. this.$refs.pageRef.insertionData(0,{
  269. settleNormType: 'INSTALL',
  270. types: '',
  271. parentCategory: '',
  272. category: '',
  273. label: '',
  274. normAmount: '',
  275. remark: ''
  276. })
  277. } else {
  278. console.log('error submit!!');
  279. return false;
  280. }
  281. });
  282. },
  283. openForm() {
  284. this.formDialog = true;
  285. },
  286. add(row){
  287. add({
  288. settleNormType: 'INSTALL',
  289. typeName: row.types.orderSmallTypeText,
  290. type: row.types.id,
  291. parentCategoryName: row.parentCategory.name,
  292. parentCategoryId: row.parentCategory.categoryId,
  293. categoryName: row.category.name,
  294. categoryId: row.category.categoryId,
  295. label: row.label,
  296. normAmount: row.normAmount,
  297. remark: row.remark
  298. }).then(res => {
  299. if(res.code ==200){
  300. this.editIndex = null
  301. this.$message({ type: 'success', message: `保存成功!` })
  302. this.$refs.pageRef.refreshList()
  303. }
  304. })
  305. },
  306. edit(row){
  307. edit({
  308. id: row.id,
  309. settleNormType: 'INSTALL',
  310. typeName: row.types.orderSmallTypeText,
  311. type: row.types.id,
  312. parentCategoryName: row.parentCategory.name,
  313. parentCategoryId: row.parentCategory.categoryId,
  314. categoryName: row.category.name,
  315. categoryId: row.category.categoryId,
  316. label: row.label,
  317. normAmount: row.normAmount,
  318. remark: row.remark
  319. }).then(res => {
  320. if(res.code ==200){
  321. this.editIndex = null
  322. this.$message({ type: 'success', message: `保存成功!` })
  323. this.$refs.pageRef.refreshList()
  324. }
  325. })
  326. }
  327. }
  328. }
  329. </script>
  330. <style lang="scss" scoped>
  331. .tab{
  332. padding: 20px 20px 0 20px;
  333. }
  334. .redbordererr {
  335. ::v-deep .el-form-item {
  336. margin: 0 !important;
  337. overflow: hidden;
  338. }
  339. }
  340. </style>