edit.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. <template>
  2. <div>
  3. <Toptitle :title="$route.query.type==1?'深化单新增':$route.query.type==2?'深化单编辑':'深化单详情'">
  4. <Upload
  5. v-if="$route.query.type!=3"
  6. style="display:inline"
  7. name="your_file"
  8. :show-upload-list="false"
  9. :headers="headers"
  10. :on-error="uploadError"
  11. :on-success="uploadSuccess"
  12. :action="$store.state.ip + '/api/contract_deep_import'"
  13. >
  14. <Button type="primary" style="margin-right:10px;"
  15. >导入</Button
  16. >
  17. </Upload>
  18. <Button @click="back" style="margin-right:10px">返回</Button>
  19. <Button @click="postData" v-if="$route.query.type!=3">保存</Button>
  20. </Toptitle>
  21. <div class="content">
  22. <Form :label-width='120' class="form_content" :style="$route.query.type==3?{'border-bottom':'1px solid #eeeeee'}:{}">
  23. <FormItem label='金螳螂ID:'>
  24. <span v-if="$route.query.type==3" class="form_item">{{formData.jtl_id}}</span>
  25. <Input v-else clearable v-model="formData.jtl_id" placeholder="请输入金螳螂ID"/>
  26. </FormItem>
  27. <FormItem label='项目编码:'>
  28. <span v-if="$route.query.type==3" class="form_item">{{formData.order_no}}</span>
  29. <Input v-else clearable v-model="formData.order_no" placeholder="请输入项目编码"/>
  30. </FormItem>
  31. <FormItem label='项目名称:'>
  32. <span v-if="$route.query.type==3" class="form_item">{{formData.project_title}}</span>
  33. <Input v-else clearable v-model="formData.project_title" placeholder="请输入项目名称"/>
  34. </FormItem>
  35. <FormItem label='项目简称:'>
  36. <span v-if="$route.query.type==3" class="form_item">{{formData.abbreviation}}</span>
  37. <Input v-else clearable v-model="formData.abbreviation" placeholder="请输入项目简称"/>
  38. </FormItem>
  39. </Form>
  40. <Form :label-width='100' class="form_content" v-if="$route.query.type==3">
  41. <FormItem label='区域:'>
  42. <Select multiple filterable v-model="searchData.region" class="form_item" :max-tag-count='2'>
  43. <Option v-for="(item,index) in regionList" :key="index" :value="item" :label='item'></Option>
  44. </Select>
  45. </FormItem>
  46. <FormItem label='图号:'>
  47. <Select multiple filterable v-model="searchData.url_number" class="form_item" :max-tag-count='2'>
  48. <Option v-for="(item,index) in urlNumberList" :key="index" :value="item" :label='item'></Option>
  49. </Select>
  50. </FormItem>
  51. <FormItem label='产品名称:'>
  52. <Select multiple filterable v-model="searchData.product_title" class="form_item" :max-tag-count='2'>
  53. <Option v-for="(item,index) in productTitleList" :key="index" :value="item" :label='item'></Option>
  54. </Select>
  55. </FormItem>
  56. <FormItem label='制单日期:'>
  57. <DatePicker type="date" placeholder="年/月/日" style="width: 200px" v-model="searchData.start_time"></DatePicker>
  58. ~
  59. <DatePicker type="date" placeholder="年/月/日" style="width: 200px" v-model="searchData.end_time"></DatePicker>
  60. </FormItem>
  61. <FormItem :label-width='60'>
  62. <Button type="primary" @click="search">搜索</Button>
  63. </FormItem>
  64. </Form>
  65. <Table :data='tableData' :columns='$route.query.type==3?detailTableColumns:tableColumns' border max-height='550'>
  66. <template slot="set" slot-scope="{index}">
  67. <a @click="del(index)">删除</a>
  68. </template>
  69. </Table>
  70. </div>
  71. <div class="content_body_page" v-if="$route.query.type==3">
  72. <Page
  73. :page-size-opts="[10, 20, 30, 40, 100]"
  74. @on-page-size-change="changeSize"
  75. @on-change="changePage"
  76. :current="pageIndex"
  77. show-total
  78. show-elevator
  79. :total="total"
  80. show-sizer
  81. :page-size="pageSize"
  82. />
  83. </div>
  84. </div>
  85. </template>
  86. <script>
  87. export default {
  88. data(){
  89. return{
  90. regionList:[],
  91. urlNumberList:[],
  92. productTitleList:[],
  93. pageIndex:1,
  94. pageSize:10,
  95. total:0,
  96. headers: { 'Authorization': localStorage.getItem('token') },
  97. tableData:[],
  98. tableColumns:[
  99. {type:'index',title:'序号',align:'center',minWidth:80},
  100. {title:'区域',align:'center',key:'region',minWidth:120},
  101. {title:'图号',align:'center',key:'url_number',minWidth:120},
  102. {title:'产品名称',align:'center',key:'product_title',minWidth:120},
  103. {title:'数量',align:'center',key:'num',minWidth:120},
  104. {title:'单位',align:'center',key:'unit',minWidth:120},
  105. {title:'饰面',align:'center',key:'finish',minWidth:120},
  106. {title:'备注',align:'center',key:'remark',minWidth:120},
  107. {title:'制单日期',align:'center',key:'crt_time',minWidth:120,render:(h,params)=>{
  108. const {row} = params;
  109. return h('span',{},this.func.replaceDateNoHMS(row.crt_time))
  110. }},
  111. {title:'操作',align:'center',key:'set',minWidth:120,slot:'set'},
  112. ],
  113. detailTableColumns:[
  114. {type:'index',title:'序号',align:'center',minWidth:80},
  115. {title:'区域',align:'center',key:'region',minWidth:120},
  116. {title:'图号',align:'center',key:'url_number',minWidth:120},
  117. {title:'产品名称',align:'center',key:'product_title',minWidth:120},
  118. {title:'数量',align:'center',key:'num',minWidth:120},
  119. {title:'单位',align:'center',key:'unit',minWidth:120},
  120. {title:'饰面',align:'center',key:'finish',minWidth:120},
  121. {title:'备注',align:'center',key:'remark',minWidth:120},
  122. {title:'制单日期',align:'center',key:'crt_time',minWidth:120,render:(h,params)=>{
  123. const {row} = params;
  124. return h('span',{},this.func.replaceDateNoHMS(row.crt_time))
  125. }}
  126. ],
  127. formData:{
  128. jtl_id:'',
  129. order_no:'',
  130. project_title:'',
  131. abbreviation:''
  132. },
  133. searchData:{
  134. region:[],
  135. url_number:[],
  136. project_title:[],
  137. start_time:'',
  138. end_time:'',
  139. }
  140. }
  141. },
  142. mounted(){
  143. if(this.$route.query.type!=1){
  144. this.initData();
  145. }
  146. },
  147. methods:{
  148. search(){
  149. let obj = JSON.parse(JSON.stringify(this.searchData));
  150. obj.start_time = obj.start_time?Date.parse(obj.start_time).toString().slice(0,10):'';
  151. obj.end_time = obj.end_time?Date.parse(obj.end_time).toString().slice(0,10):'';
  152. this.axios.post('/api/contract_deep_detail',{order_no:this.$route.query.order_no,...obj,page_index:this.pageIndex,page_size:this.pageSize}).then(res=>{
  153. this.tableData = res.data.children.data;
  154. this.total = res.data.children.total
  155. })
  156. },
  157. initData(){
  158. let obj = {};
  159. if(this.$route.query.type==3){
  160. obj.page_index = this.pageIndex;
  161. obj.page_size = this.pageSize;
  162. }
  163. this.axios.post('/api/contract_deep_detail',{order_no:this.$route.query.order_no,...obj}).then(res=>{
  164. this.formData = JSON.parse(JSON.stringify(res.data));
  165. delete this.formData.children;
  166. this.tableData = res.data.children.data;
  167. this.total = res.data.children.total;
  168. if(this.$route.query.type==3){
  169. this.urlNumberList = res.data.url_number_list;
  170. this.regionList = res.data.region_list;
  171. this.productTitleList = res.data.product_title_list;
  172. }
  173. })
  174. },
  175. uploadError(err) {
  176. this.$Message.error(err.msg || "上传失败");
  177. },
  178. uploadSuccess(res){
  179. if (res.code == 200) {
  180. this.$Message.success(res.msg || "上传成功");
  181. if(this.tableData.length==0){
  182. this.tableData = res.data;
  183. }else{
  184. let data = JSON.parse(JSON.stringify(this.tableData));
  185. res.data.forEach(v => {
  186. let arr = [];
  187. arr = this.tableData.filter(x=>{
  188. return x.region == v.region&&x.product_title == v.product_title&&x.url_number==v.url_number;
  189. })
  190. if(arr.length==0){
  191. data.push(v);
  192. }else{
  193. this.tableData.forEach((ele,index)=>{
  194. if(ele.region == v.region&&ele.product_title == v.product_title&&ele.url_number == v.url_number){
  195. data.splice(index,1,v)
  196. }
  197. })
  198. }
  199. });
  200. this.tableData = data;
  201. }
  202. } else {
  203. this.$Message.warning(res.msg || "上传失败");
  204. }
  205. },
  206. postData(){
  207. if(this.tableData.length==0){
  208. return this.$Message.warning('请先导入数据!')
  209. }
  210. if(!this.formData.order_no||!this.formData.project_title||!this.formData.abbreviation){
  211. return this.$Message.warning('请输入完整信息!')
  212. }
  213. if(this.$route.query.type==1){
  214. this.axios.post('/api/contract_deep_add',{...this.formData,children:this.tableData}).then(res=>{
  215. if(res.code==200){
  216. this.$Message.success(res.msg);
  217. this.back();
  218. }
  219. })
  220. }else{
  221. this.axios.post('/api/contract_deep_edit',{order_no:this.formData.order_no,jtl_id:this.formData.jtl_id,project_title:this.formData.project_title,abbreviation:this.formData.abbreviation,children:this.tableData}).then(res=>{
  222. if(res.code==200){
  223. this.$Message.success(res.msg);
  224. this.back();
  225. }
  226. })
  227. }
  228. },
  229. back(){
  230. this.$router.go(-1);
  231. },
  232. del(index){
  233. this.tableData.splice(index,1);
  234. },
  235. changePage(e){
  236. this.pageIndex =e;
  237. this.search();
  238. },
  239. changeSize(e){
  240. this.pageSize = e;
  241. this.pageIndex = 1;
  242. this.search();
  243. }
  244. }
  245. }
  246. </script>
  247. <style lang="scss" scoped>
  248. .form_content{
  249. margin-top:15px;
  250. display: flex;
  251. flex-wrap:wrap;
  252. }
  253. .content_body_page{
  254. text-align: center;
  255. margin-top: 10px;
  256. }
  257. .content{
  258. height:85%;
  259. overflow: auto;
  260. }
  261. .form_item{
  262. width:200px;
  263. display: inline-block;
  264. }
  265. </style>