Merge branch 'master' into dev_zhou

# Conflicts:
#	soong_workflow/templates/soong_workflow_templates.xml
This commit is contained in:
李鹏宇
2025-11-14 19:50:39 +08:00
21 changed files with 224 additions and 145 deletions
@@ -19,7 +19,8 @@
<page string="审批详情" invisible="not work_end">
<field name="log_ids" style="width:100%; margin-top: 10px;" domain="[('node_btn_name', '!=', '1')]">
<tree editable="bottom">
<field name="sequence" string="" widget="handle" groups="soong_workflow.group_soong_workflow_manager"/>
<field name="sequence" string="" widget="handle"
groups="soong_workflow.group_soong_workflow_manager"/>
<field name="name" string="" readonly="0"/>
<field name="comment" string=""/>
<field name="done_by" string=""/>
@@ -43,7 +44,8 @@
<page string="关联流程" invisible="not soong_record_ids">
<field name="soong_record_ids" style="width:100%; margin-top: 10px;">
<tree edit="true" delete="False" editable="bottom" type="object">
<field name="workflow_record_id" domain="[('users_ids', 'in', uid)]" options="{'no_open': True}"/>
<field name="workflow_record_id" domain="[('users_ids', 'in', uid)]"
options="{'no_open': True}"/>
<field name="code"/>
<field name="approvals_group_id" column_invisible="1"/>
<field name="create_uid"/>
@@ -93,7 +95,8 @@
<page string="关联流程" invisible="not soong_record_ids">
<field name="soong_record_ids" style="width:100%%; margin-top: 10px;">
<tree editable="bottom" delete="False">
<field name="workflow_record_id" domain="[('users_ids', 'in', uid)]" options="{'no_open': True}"/>
<field name="workflow_record_id" domain="[('users_ids', 'in', uid)]"
options="{'no_open': True}"/>
<field name="approvals_group_id" column_invisible="1"/>
<field name="create_uid"/>
<field name="write_date2"/>
@@ -84,4 +84,69 @@
<field name="view_mode">tree</field>
<field name="context">{'search_default_code': 1}</field>
</record>
<!-- 定义 kanban-->
<record id="soong_workflow_log_kanban" model="ir.ui.view">
<field name="name">soong.workflow.log.kanban</field>
<field name="model">soong.workflow.log</field>
<field name="arch" type="xml">
<kanban class="o_kanban_mobile" >
<field name="id"/>
<field name="sequence"/>
<field name="name"/>
<field name="comment"/>
<field name="done_by"/>
<field name="lase_click_date"/>
<field name="approval_state"/>
<field name="node_btn_name"/>
<field name="document_ids"/>
<templates>
<t t-name="kanban-box">
<div class="oe_kanban_global_click o_kanban_card oe_kanban_global_area">
<div class="o_kanban_card_header">
<div class="o_kanban_card_title">
<h4><field name="name"/></h4>
</div>
</div>
<div class="o_kanban_card_content">
<div class="row">
<div class="col-6">
<strong>审批人:</strong>
<field name="done_by"/>
</div>
<div class="col-6">
<strong>状态:</strong>
<field name="approval_state"/>
</div>
</div>
<div class="row mt-2">
<div class="col-12">
<strong>意见:</strong>
<field name="comment"/>
</div>
</div>
<div class="row mt-2">
<div class="col-6">
<strong>操作时间:</strong>
<field name="lase_click_date"/>
</div>
<div class="col-6" >
<strong>按钮:</strong>
<field name="node_btn_name"/>
</div>
</div>
</div>
<div class="o_kanban_card_footer">
<div class="o_kanban_record_bottom">
<div class="oe_kanban_bottom_right">
<field name="document_ids" widget="preview_many2many"/>
</div>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
</odoo>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{_ as e}from"./index-PqCAfNk6.js";const r={};function c(n,t){return null}const o=e(r,[["render",c]]);export{o as default};
import{_ as e}from"./index-D74aaX2u.js";const r={};function c(n,t){return null}const o=e(r,[["render",c]]);export{o as default};
@@ -1 +1 @@
import{B as _,E as i,C as d,D as v}from"./requests-BndsySCf.js";import{_ as p,r as h,o as m,u as y,h as f,i as l,g as a,t,k,l as g}from"./index-PqCAfNk6.js";const w=r=>_("/yuthon/yuthon/will/task",{id:r}),x={class:"container"},B={class:"meeting-header"},C={class:"title"},q={class:"time"},D={class:"location"},E={__name:"Journey",setup(r){const u=y(),e=h({});return m(async()=>{try{const s=parseInt(u.query.id),n=await w(s);e.value=n.data}catch(s){i("获取任务详情失败"),console.error(s)}}),(s,n)=>{const o=v,c=d;return g(),f("div",x,[l("div",B,[l("div",C,t(e.value.name),1),l("div",q,t(e.value.start_date)+" "+t(e.value.start_date_week)+" "+t(e.value.request_hour_from)+" - "+t(e.value.request_hour_to),1),l("div",D,"地址: "+t(e.value.address),1)]),a(c,null,{default:k(()=>[a(o,{title:"组织人",value:e.value.user_id},null,8,["value"]),a(o,{title:"参与人",value:"共"+(e.value.employee_ids?.length||0)+"人"},null,8,["value"]),a(o,{title:"描述",value:e.value.remarks},null,8,["value"]),a(o,{title:"任务编号",value:e.value.code},null,8,["value"])]),_:1})])}}},N=p(E,[["__scopeId","data-v-0aa7162a"]]);export{N as default};
import{B as _,E as i,C as d,D as v}from"./requests-5uhdwPNX.js";import{_ as p,r as h,o as m,u as y,h as f,i as l,g as a,t,k,l as g}from"./index-D74aaX2u.js";const w=r=>_("/yuthon/yuthon/will/task",{id:r}),x={class:"container"},B={class:"meeting-header"},C={class:"title"},q={class:"time"},D={class:"location"},E={__name:"Journey",setup(r){const u=y(),e=h({});return m(async()=>{try{const s=parseInt(u.query.id),n=await w(s);e.value=n.data}catch(s){i("获取任务详情失败"),console.error(s)}}),(s,n)=>{const o=v,c=d;return g(),f("div",x,[l("div",B,[l("div",C,t(e.value.name),1),l("div",q,t(e.value.start_date)+" "+t(e.value.start_date_week)+" "+t(e.value.request_hour_from)+" - "+t(e.value.request_hour_to),1),l("div",D,"地址: "+t(e.value.address),1)]),a(c,null,{default:k(()=>[a(o,{title:"组织人",value:e.value.user_id},null,8,["value"]),a(o,{title:"参与人",value:"共"+(e.value.employee_ids?.length||0)+"人"},null,8,["value"]),a(o,{title:"描述",value:e.value.remarks},null,8,["value"]),a(o,{title:"任务编号",value:e.value.code},null,8,["value"])]),_:1})])}}},N=p(E,[["__scopeId","data-v-0aa7162a"]]);export{N as default};
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{v as T,t as V,c as w,H,I as O,j as x,n as y,F as b,B as I,E as k,C as j,D as G}from"./requests-BndsySCf.js";import{B as K}from"./index-CApHSDPQ.js";import{d as D,g as n,T as M,F,s as L,_ as R,r as J,o as Q,u as U,h as B,i as v,t as p,k as C,l as S,p as W,q as X}from"./index-PqCAfNk6.js";import{I as Y}from"./index-DNCXPfTd.js";const[Z,P]=w("tag"),ee={size:String,mark:Boolean,show:V,type:T("default"),color:String,plain:Boolean,round:Boolean,textColor:String,closeable:Boolean};var te=D({name:Z,props:ee,emits:["close"],setup(t,{slots:e,emit:d}){const s=o=>{o.stopPropagation(),d("close",o)},i=()=>t.plain?{color:t.textColor||t.color,borderColor:t.color}:{color:t.textColor,background:t.color},r=()=>{var o;const{type:m,mark:_,plain:c,round:l,size:u,closeable:f}=t,g={mark:_,plain:c,round:l};u&&(g[u]=u);const h=f&&n(O,{name:"cross",class:[P("close"),H],onClick:s},null);return n("span",{style:i(),class:P([g,m])},[(o=e.default)==null?void 0:o.call(e),h])};return()=>n(M,{name:t.closeable?"van-fade":void 0},{default:()=>[t.show?r():null]})}});const ne=x(te),[ae,a]=w("card"),re={tag:String,num:y,desc:String,thumb:String,title:String,price:y,centered:Boolean,lazyLoad:Boolean,currency:T("¥"),thumbLink:String,originPrice:y};var ce=D({name:ae,props:re,emits:["clickThumb"],setup(t,{slots:e,emit:d}){const s=()=>{if(e.title)return e.title();if(t.title)return n("div",{class:[a("title"),"van-multi-ellipsis--l2"]},[t.title])},i=()=>{if(e.tag||t.tag)return n("div",{class:a("tag")},[e.tag?e.tag():n(ne,{mark:!0,type:"primary"},{default:()=>[t.tag]})])},r=()=>e.thumb?e.thumb():n(Y,{src:t.thumb,fit:"cover",width:"100%",height:"100%",lazyLoad:t.lazyLoad},null),o=()=>{if(e.thumb||t.thumb)return n("a",{href:t.thumbLink,class:a("thumb"),onClick:c=>d("clickThumb",c)},[r(),i()])},m=()=>{if(e.desc)return e.desc();if(t.desc)return n("div",{class:[a("desc"),"van-ellipsis"]},[t.desc])},_=()=>{const c=t.price.toString().split(".");return n("div",null,[n("span",{class:a("price-currency")},[t.currency]),n("span",{class:a("price-integer")},[c[0]]),c.length>1&&n(F,null,[L("."),n("span",{class:a("price-decimal")},[c[1]])])])};return()=>{var c,l,u;const f=e.num||b(t.num),g=e.price||b(t.price),h=e["origin-price"]||b(t.originPrice),N=f||g||h||e.bottom,$=g&&n("div",{class:a("price")},[e.price?e.price():_()]),z=h&&n("div",{class:a("origin-price")},[e["origin-price"]?e["origin-price"]():`${t.currency} ${t.originPrice}`]),A=f&&n("div",{class:a("num")},[e.num?e.num():`x${t.num}`]),E=e.footer&&n("div",{class:a("footer")},[e.footer()]),q=N&&n("div",{class:a("bottom")},[(c=e["price-top"])==null?void 0:c.call(e),$,z,A,(l=e.bottom)==null?void 0:l.call(e)]);return n("div",{class:a()},[n("div",{class:a("header")},[o(),n("div",{class:a("content",{centered:t.centered})},[n("div",null,[s(),m(),(u=e.tags)==null?void 0:u.call(e)]),q])]),E])}}});const oe=x(ce),ie=t=>I("/yuthon/yuthon/salary",{id:t}),le=t=>I("/yuthon/yuthon/salary/confirm",{id:t}),se={class:"container"},ue={class:"header"},de={class:"salary-amount"},me={class:"detail-section"},_e={class:"footer"},ge={__name:"Salary",setup(t){const e=J({}),d=async()=>{k("已确认工资条");const i=parseInt(s.query.id);await le(i),k("提交成功")},s=U();return Q(async()=>{const i=parseInt(s.query.id);try{const r=await ie(i);console.log(r),e.value=r.data}catch(r){k("获取工资条失败"),console.error(r)}}),(i,r)=>{const o=oe,m=G,_=j,c=K;return S(),B("div",se,[v("div",ue,p(e.value.date_from)+" - "+p(e.value.date_to)+" 工资条 ",1),n(o,{class:"salary-card",title:"实发工资",bordered:""},{desc:C(()=>[v("div",de,p(e.value.amount_total),1)]),_:1}),v("div",me,[r[0]||(r[0]=v("div",{class:"section-title"},"明细",-1)),n(_,null,{default:C(()=>[(S(!0),B(F,null,W(e.value.lines_ids,l=>(S(),X(m,{key:l.name,title:l.name,value:l.total},null,8,["title","value"]))),128))]),_:1})]),v("div",_e,[n(c,{type:"primary",block:"",onClick:d},{default:C(()=>r[1]||(r[1]=[L("确认",-1)])),_:1,__:[1]})])])}}},be=R(ge,[["__scopeId","data-v-f0e2f621"]]);export{be as default};
import{v as T,t as V,c as w,H,I as O,j as x,n as y,F as b,B as I,E as k,C as j,D as G}from"./requests-5uhdwPNX.js";import{B as K}from"./index-CCaYPYnz.js";import{d as D,g as n,T as M,F,s as L,_ as R,r as J,o as Q,u as U,h as B,i as v,t as p,k as C,l as S,p as W,q as X}from"./index-D74aaX2u.js";import{I as Y}from"./index-DlbF_Keh.js";const[Z,P]=w("tag"),ee={size:String,mark:Boolean,show:V,type:T("default"),color:String,plain:Boolean,round:Boolean,textColor:String,closeable:Boolean};var te=D({name:Z,props:ee,emits:["close"],setup(t,{slots:e,emit:d}){const s=o=>{o.stopPropagation(),d("close",o)},i=()=>t.plain?{color:t.textColor||t.color,borderColor:t.color}:{color:t.textColor,background:t.color},r=()=>{var o;const{type:m,mark:_,plain:c,round:l,size:u,closeable:f}=t,g={mark:_,plain:c,round:l};u&&(g[u]=u);const h=f&&n(O,{name:"cross",class:[P("close"),H],onClick:s},null);return n("span",{style:i(),class:P([g,m])},[(o=e.default)==null?void 0:o.call(e),h])};return()=>n(M,{name:t.closeable?"van-fade":void 0},{default:()=>[t.show?r():null]})}});const ne=x(te),[ae,a]=w("card"),re={tag:String,num:y,desc:String,thumb:String,title:String,price:y,centered:Boolean,lazyLoad:Boolean,currency:T("¥"),thumbLink:String,originPrice:y};var ce=D({name:ae,props:re,emits:["clickThumb"],setup(t,{slots:e,emit:d}){const s=()=>{if(e.title)return e.title();if(t.title)return n("div",{class:[a("title"),"van-multi-ellipsis--l2"]},[t.title])},i=()=>{if(e.tag||t.tag)return n("div",{class:a("tag")},[e.tag?e.tag():n(ne,{mark:!0,type:"primary"},{default:()=>[t.tag]})])},r=()=>e.thumb?e.thumb():n(Y,{src:t.thumb,fit:"cover",width:"100%",height:"100%",lazyLoad:t.lazyLoad},null),o=()=>{if(e.thumb||t.thumb)return n("a",{href:t.thumbLink,class:a("thumb"),onClick:c=>d("clickThumb",c)},[r(),i()])},m=()=>{if(e.desc)return e.desc();if(t.desc)return n("div",{class:[a("desc"),"van-ellipsis"]},[t.desc])},_=()=>{const c=t.price.toString().split(".");return n("div",null,[n("span",{class:a("price-currency")},[t.currency]),n("span",{class:a("price-integer")},[c[0]]),c.length>1&&n(F,null,[L("."),n("span",{class:a("price-decimal")},[c[1]])])])};return()=>{var c,l,u;const f=e.num||b(t.num),g=e.price||b(t.price),h=e["origin-price"]||b(t.originPrice),N=f||g||h||e.bottom,$=g&&n("div",{class:a("price")},[e.price?e.price():_()]),z=h&&n("div",{class:a("origin-price")},[e["origin-price"]?e["origin-price"]():`${t.currency} ${t.originPrice}`]),A=f&&n("div",{class:a("num")},[e.num?e.num():`x${t.num}`]),E=e.footer&&n("div",{class:a("footer")},[e.footer()]),q=N&&n("div",{class:a("bottom")},[(c=e["price-top"])==null?void 0:c.call(e),$,z,A,(l=e.bottom)==null?void 0:l.call(e)]);return n("div",{class:a()},[n("div",{class:a("header")},[o(),n("div",{class:a("content",{centered:t.centered})},[n("div",null,[s(),m(),(u=e.tags)==null?void 0:u.call(e)]),q])]),E])}}});const oe=x(ce),ie=t=>I("/yuthon/yuthon/salary",{id:t}),le=t=>I("/yuthon/yuthon/salary/confirm",{id:t}),se={class:"container"},ue={class:"header"},de={class:"salary-amount"},me={class:"detail-section"},_e={class:"footer"},ge={__name:"Salary",setup(t){const e=J({}),d=async()=>{k("已确认工资条");const i=parseInt(s.query.id);await le(i),k("提交成功")},s=U();return Q(async()=>{const i=parseInt(s.query.id);try{const r=await ie(i);console.log(r),e.value=r.data}catch(r){k("获取工资条失败"),console.error(r)}}),(i,r)=>{const o=oe,m=G,_=j,c=K;return S(),B("div",se,[v("div",ue,p(e.value.date_from)+" - "+p(e.value.date_to)+" 工资条 ",1),n(o,{class:"salary-card",title:"实发工资",bordered:""},{desc:C(()=>[v("div",de,p(e.value.amount_total),1)]),_:1}),v("div",me,[r[0]||(r[0]=v("div",{class:"section-title"},"明细",-1)),n(_,null,{default:C(()=>[(S(!0),B(F,null,W(e.value.lines_ids,l=>(S(),X(m,{key:l.name,title:l.name,value:l.total},null,8,["title","value"]))),128))]),_:1})]),v("div",_e,[n(c,{type:"primary",block:"",onClick:d},{default:C(()=>r[1]||(r[1]=[L("确认",-1)])),_:1,__:[1]})])])}}},be=R(ge,[["__scopeId","data-v-f0e2f621"]]);export{be as default};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{K as z,c as I,U as R,aa as C,W as D,v as l,n as L,I as N,p as U,L as p,j as q}from"./requests-BndsySCf.js";import{d as w,g as o}from"./index-PqCAfNk6.js";const[O,a]=I("button"),_=z({},D,{tag:l("button"),text:String,icon:String,type:l("default"),size:l("normal"),color:String,block:Boolean,plain:Boolean,round:Boolean,square:Boolean,loading:Boolean,hairline:Boolean,disabled:Boolean,iconPrefix:String,nativeType:l("button"),loadingSize:L,loadingText:String,loadingType:String,iconPosition:l("left")});var j=w({name:O,props:_,emits:["click"],setup(e,{emit:g,slots:t}){const f=R(),b=()=>t.loading?t.loading():o(p,{size:e.loadingSize,type:e.loadingType,class:a("loading")},null),c=()=>{if(e.loading)return b();if(t.icon)return o("div",{class:a("icon")},[t.icon()]);if(e.icon)return o(N,{name:e.icon,class:a("icon"),classPrefix:e.iconPrefix},null)},m=()=>{let n;if(e.loading?n=e.loadingText:n=t.default?t.default():e.text,n)return o("span",{class:a("text")},[n])},x=()=>{const{color:n,plain:r}=e;if(n){const i={color:r?n:"white"};return r||(i.background=n),n.includes("gradient")?i.border=0:i.borderColor=n,i}},y=n=>{e.loading?U(n):e.disabled||(g("click",n),f())};return()=>{const{tag:n,type:r,size:i,block:S,round:B,plain:P,square:k,loading:T,disabled:s,hairline:d,nativeType:v,iconPosition:u}=e,h=[a([r,i,{plain:P,block:S,round:B,square:k,loading:T,disabled:s,hairline:d}]),{[C]:d}];return o(n,{type:v,class:h,style:x(),disabled:s,onClick:y},{default:()=>[o("div",{class:a("content")},[u==="left"&&c(),m(),u==="right"&&c()])]})}}});const V=q(j);export{V as B};
import{K as z,c as I,U as R,ab as C,W as D,v as l,n as L,I as N,p as U,L as p,j as q}from"./requests-5uhdwPNX.js";import{d as w,g as o}from"./index-D74aaX2u.js";const[O,a]=I("button"),_=z({},D,{tag:l("button"),text:String,icon:String,type:l("default"),size:l("normal"),color:String,block:Boolean,plain:Boolean,round:Boolean,square:Boolean,loading:Boolean,hairline:Boolean,disabled:Boolean,iconPrefix:String,nativeType:l("button"),loadingSize:L,loadingText:String,loadingType:String,iconPosition:l("left")});var j=w({name:O,props:_,emits:["click"],setup(e,{emit:g,slots:t}){const f=R(),b=()=>t.loading?t.loading():o(p,{size:e.loadingSize,type:e.loadingType,class:a("loading")},null),c=()=>{if(e.loading)return b();if(t.icon)return o("div",{class:a("icon")},[t.icon()]);if(e.icon)return o(N,{name:e.icon,class:a("icon"),classPrefix:e.iconPrefix},null)},m=()=>{let n;if(e.loading?n=e.loadingText:n=t.default?t.default():e.text,n)return o("span",{class:a("text")},[n])},x=()=>{const{color:n,plain:r}=e;if(n){const i={color:r?n:"white"};return r||(i.background=n),n.includes("gradient")?i.border=0:i.borderColor=n,i}},y=n=>{e.loading?U(n):e.disabled||(g("click",n),f())};return()=>{const{tag:n,type:r,size:i,block:S,round:B,plain:P,square:k,loading:T,disabled:s,hairline:d,nativeType:v,iconPosition:u}=e,h=[a([r,i,{plain:P,block:S,round:B,square:k,loading:T,disabled:s,hairline:d}]),{[C]:d}];return o(n,{type:v,class:h,style:x(),disabled:s,onClick:y},{default:()=>[o("div",{class:a("content")},[u==="left"&&c(),m(),u==="right"&&c()])]})}}});const V=q(j);export{V as B};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{v as P,t as S,n as d,c as B,G as u,F as $,J as j,I as D,j as _}from"./requests-BndsySCf.js";import{d as C,r as f,v as F,c as N,w as R,f as U,o as G,n as z,g as n,x as J,y as M,m as b}from"./index-PqCAfNk6.js";const[O,i]=B("image"),T={src:String,alt:String,fit:String,position:String,round:Boolean,block:Boolean,width:d,height:d,radius:d,lazyLoad:Boolean,iconSize:d,showError:S,errorIcon:P("photo-fail"),iconPrefix:String,showLoading:S,loadingIcon:P("photo"),crossorigin:String,referrerpolicy:String,decoding:String};var V=C({name:O,props:T,emits:["load","error"],setup(r,{emit:g,slots:c}){const t=f(!1),a=f(!0),o=f(),{$Lazyload:l}=F().proxy,x=N(()=>{const e={width:u(r.width),height:u(r.height)};return $(r.radius)&&(e.overflow="hidden",e.borderRadius=u(r.radius)),e});R(()=>r.src,()=>{t.value=!1,a.value=!0});const v=e=>{a.value&&(a.value=!1,g("load",e))},m=()=>{const e=new Event("load");Object.defineProperty(e,"target",{value:o.value,enumerable:!0}),v(e)},h=e=>{t.value=!0,a.value=!1,g("error",e)},y=(e,s,I)=>I?I():n(D,{name:e,size:r.iconSize,class:s,classPrefix:r.iconPrefix},null),E=()=>{if(a.value&&r.showLoading)return n("div",{class:i("loading")},[y(r.loadingIcon,i("loading-icon"),c.loading)]);if(t.value&&r.showError)return n("div",{class:i("error")},[y(r.errorIcon,i("error-icon"),c.error)])},k=()=>{if(t.value||!r.src)return;const e={alt:r.alt,class:i("img"),decoding:r.decoding,style:{objectFit:r.fit,objectPosition:r.position},crossorigin:r.crossorigin,referrerpolicy:r.referrerpolicy};return r.lazyLoad?J(n("img",b({ref:o},e),null),[[M("lazy"),r.src]]):n("img",b({ref:o,src:r.src,onLoad:v,onError:h},e),null)},w=({el:e})=>{const s=()=>{e===o.value&&a.value&&m()};o.value?s():z(s)},L=({el:e})=>{e===o.value&&!t.value&&h()};return l&&j&&(l.$on("loaded",w),l.$on("error",L),U(()=>{l.$off("loaded",w),l.$off("error",L)})),G(()=>{z(()=>{var e;(e=o.value)!=null&&e.complete&&!r.lazyLoad&&m()})}),()=>{var e;return n("div",{class:i({round:r.round,block:r.block}),style:x.value},[k(),E(),(e=c.default)==null?void 0:e.call(c)])}}});const H=_(V);export{H as I};
import{v as P,t as S,n as d,c as B,G as u,F as $,J as j,I as D,j as _}from"./requests-5uhdwPNX.js";import{d as C,r as f,v as F,c as N,w as R,f as U,o as G,n as z,g as n,x as J,y as M,m as b}from"./index-D74aaX2u.js";const[O,i]=B("image"),T={src:String,alt:String,fit:String,position:String,round:Boolean,block:Boolean,width:d,height:d,radius:d,lazyLoad:Boolean,iconSize:d,showError:S,errorIcon:P("photo-fail"),iconPrefix:String,showLoading:S,loadingIcon:P("photo"),crossorigin:String,referrerpolicy:String,decoding:String};var V=C({name:O,props:T,emits:["load","error"],setup(r,{emit:g,slots:c}){const t=f(!1),a=f(!0),o=f(),{$Lazyload:l}=F().proxy,x=N(()=>{const e={width:u(r.width),height:u(r.height)};return $(r.radius)&&(e.overflow="hidden",e.borderRadius=u(r.radius)),e});R(()=>r.src,()=>{t.value=!1,a.value=!0});const v=e=>{a.value&&(a.value=!1,g("load",e))},m=()=>{const e=new Event("load");Object.defineProperty(e,"target",{value:o.value,enumerable:!0}),v(e)},h=e=>{t.value=!0,a.value=!1,g("error",e)},y=(e,s,I)=>I?I():n(D,{name:e,size:r.iconSize,class:s,classPrefix:r.iconPrefix},null),E=()=>{if(a.value&&r.showLoading)return n("div",{class:i("loading")},[y(r.loadingIcon,i("loading-icon"),c.loading)]);if(t.value&&r.showError)return n("div",{class:i("error")},[y(r.errorIcon,i("error-icon"),c.error)])},k=()=>{if(t.value||!r.src)return;const e={alt:r.alt,class:i("img"),decoding:r.decoding,style:{objectFit:r.fit,objectPosition:r.position},crossorigin:r.crossorigin,referrerpolicy:r.referrerpolicy};return r.lazyLoad?J(n("img",b({ref:o},e),null),[[M("lazy"),r.src]]):n("img",b({ref:o,src:r.src,onLoad:v,onError:h},e),null)},w=({el:e})=>{const s=()=>{e===o.value&&a.value&&m()};o.value?s():z(s)},L=({el:e})=>{e===o.value&&!t.value&&h()};return l&&j&&(l.$on("loaded",w),l.$on("error",L),U(()=>{l.$off("loaded",w),l.$off("error",L)})),G(()=>{z(()=>{var e;(e=o.value)!=null&&e.complete&&!r.lazyLoad&&m()})}),()=>{var e;return n("div",{class:i({round:r.round,block:r.block}),style:x.value},[k(),E(),(e=c.default)==null?void 0:e.call(c)])}}});const H=_(V);export{H as I};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+2 -1
View File
@@ -5,7 +5,8 @@
<link rel="icon" href="/yuthon_base/static/webh5/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>天投云</title>
<script type="module" crossorigin src="/yuthon_base/static/webh5/assets/index-PqCAfNk6.js"></script>
<script type="module" crossorigin src="/yuthon_base/static/webh5/assets/index-D74aaX2u.js"></script>
<link rel="stylesheet" crossorigin href="/yuthon_base/static/webh5/assets/index-D93jrBSo.css">
</head>
<body>
<div id="app"></div>
@@ -14,26 +14,28 @@
</h1>
</div>
<div class="o_employee_avatar m-0 p-0">
<field name="image_1920" widget="image" class="oe_avatar m-0" options="{&quot;zoom&quot;: true, &quot;preview_image&quot;:&quot;avatar_128&quot;}"/>
<field name="image_1920" widget="image" class="oe_avatar m-0"
options="{&quot;zoom&quot;: true, &quot;preview_image&quot;:&quot;avatar_128&quot;}"/>
</div>
</div>
<group col="2" readonly="1">
<group>
<field name="mobile_phone" />
<field name="mobile_phone"/>
<field name="work_phone"/>
<field name="work_email"/>
<field name="user_state" readonly="1" options="{'no_open': True}"/>
<field name="user_role_id" readonly="1" invisible="1"/>
<field name="user_role_ids" widget="many2many_tags" invisible="1"/>
<field name="company_id" readonly="1" options="{'no_open': True}"/>
<field name="user_state" readonly="1" options="{'no_open': True}"/>
<field name="user_role_id" readonly="1" invisible="1"/>
<field name="user_role_ids" widget="many2many_tags" invisible="1"/>
<field name="company_id" readonly="1" options="{'no_open': True}"/>
</group>
<group>
<field name="department_id" readonly="1" options="{'no_open': True}"/>
<field name="department_ids" widget="many2many_tags" readonly="1" options="{'no_open': True}"/>
<field name="department_ids" widget="many2many_tags" readonly="1"
options="{'no_open': True}"/>
<field name="job_id" options="{'no_open': True}"/>
<field name="number" readonly="1"/>
<field name="user_number" readonly="1"/>
<field name="contract_type_id" options="{'no_open': True}"/>
<field name="contract_type_id" options="{'no_open': True}"/>
<field name="parent_id" readonly="1" options="{'no_open': True}" string="上级领导"/>
</group>
</group>
@@ -95,7 +97,7 @@
</sheet>
</form>
</field>
</record>
</record>
<record id="view_employee_inherit_del_form" model="ir.ui.view">
<field name="name">hr.employee.inherit.del.form.inherit</field>
<field name="model">hr.employee</field>
@@ -126,18 +128,20 @@
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='company_id']" position="attributes">
<attribute name="options">"{'no_open': True}"</attribute>
<attribute name="options">"{'no_open': True}"</attribute>
</xpath>
<xpath expr="//field[@name='work_email']" position="attributes">
<attribute name="options">"{'no_open': True}"</attribute>
<attribute name="options">"{'no_open': True}"</attribute>
</xpath>
<xpath expr="//field[@name='department_id']" position="attributes">
<attribute name="options">"{'no_open': True}"</attribute>
<attribute name="options">"{'no_open': True}"</attribute>
</xpath>
<xpath expr="//field[@name='work_email']" position="after">
<field name="user_state"/>
<field name="user_role_id" domain="[('company_id', '=', company_id), ('is_main', '=', True)]" options="{'no_open': True}"/>
<field name="user_role_ids" widget="many2many_tags" domain="[('company_id', '=', company_id), ('is_main', '!=', True)]" options="{'no_open': True}"/>
<field name="user_role_id" domain="[('company_id', '=', company_id), ('is_main', '=', True)]"
options="{'no_open': True}"/>
<field name="user_role_ids" widget="many2many_tags"
domain="[('company_id', '=', company_id), ('is_main', '!=', True)]" options="{'no_open': True}"/>
</xpath>
<xpath expr="//field[@name='department_id']" position="attributes">
<attribute name="widget">ztree_select</attribute>
@@ -197,7 +201,8 @@
</group>
<group string="家庭状态">
<field name="marital"/>
<field name="marriage_documents_id" invisible="marital != 'married'" options="{'no_create': True}"
<field name="marriage_documents_id" invisible="marital != 'married'"
options="{'no_create': True}"
widget="preview_many2one"/>
<field name="spouse_complete_name" invisible="marital not in ['married', 'cohabitant']"/>
<field name="spouse_birthdate" invisible="marital not in ['married', 'cohabitant']"/>
@@ -209,10 +214,10 @@
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='job_id']" position="attributes">
<attribute name="options">"{'no_open': True}"</attribute>
<attribute name="options">"{'no_open': True}"</attribute>
</xpath>
<xpath expr="//field[@name='parent_id']" position="attributes">
<attribute name="options">"{'no_create': True, 'no_open': True}"</attribute>
<attribute name="options">"{'no_create': True, 'no_open': True}"</attribute>
</xpath>
<xpath expr="//field[@name='job_id']" position="after">
<field name="number"/>
@@ -220,10 +225,10 @@
<field name="contract_type_id" options="{'no_open': True}"/>
</xpath>
<xpath expr="//field[@name='department_id']" position="attributes">
<attribute name="readonly">1</attribute>
<attribute name="readonly">1</attribute>
</xpath>
<xpath expr="//field[@name='job_id']" position="attributes">
<attribute name="readonly">1</attribute>
<attribute name="readonly">1</attribute>
</xpath>
<xpath expr="//field[@name='identification_id']" position="after">
<field name="is_identification" invisible="1"/>
@@ -234,7 +239,7 @@
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='category_ids']" position="attributes">
<attribute name="invisible">1</attribute>
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='wecom_userid']" position="after">
<field name="user_type"/>
@@ -243,7 +248,7 @@
<div>
<field name="retire_years" style="width: 5%"/>
</div>
<field name="user_salary"/>
<field name="user_salary"/>
</xpath>
<xpath expr="//group[@name='active_group']" position="after">
<group string="工作信息">
@@ -449,15 +454,15 @@
</field>
</group>
<group col="3" string="大病医疗">
<group>
<field name="hospital_name"/>
</group>
<group>
<field name="hospital_related"/>
</group>
<group>
<field name="original_amount"/>
</group>
<group>
<field name="hospital_name"/>
</group>
<group>
<field name="hospital_related"/>
</group>
<group>
<field name="original_amount"/>
</group>
</group>
<group col="3" string="维续教育">
<group>
@@ -470,28 +475,28 @@
<field name="education_deduction"/>
</group>
</group>
<group col="3" string="住房贷款">
<group>
<field name="loan_name"/>
<group col="3" string="住房贷款">
<group>
<field name="loan_name"/>
</group>
<group>
<field name="loan_end_date"/>
</group>
<group>
<field name="loan_deduction"/>
</group>
</group>
<group>
<field name="loan_end_date"/>
<group col="3" string="住房租金">
<group>
<field name="rent_name"/>
</group>
<group>
<field name="rent_end_date"/>
</group>
<group>
<field name="rent_deduction"/>
</group>
</group>
<group>
<field name="loan_deduction"/>
</group>
</group>
<group col="3" string="住房租金">
<group>
<field name="rent_name"/>
</group>
<group>
<field name="rent_end_date"/>
</group>
<group>
<field name="rent_deduction"/>
</group>
</group>
</page>
</xpath>
</field>
@@ -504,42 +509,42 @@
<xpath expr="//tree" position="replace">
<tree string="员工列表" banner_route="/employee/banner/route" limit="15"
decoration-info="end_comparison == 'blue'"
decoration-danger="end_comparison == 'red'"
decoration-warning="end_comparison == 'yellow'"
decoration-danger="end_comparison == 'red'"
decoration-warning="end_comparison == 'yellow'"
>
<header>
</header>
<field name="end_comparison" column_invisible="1"/>
<field name="name"/>
<field name="department_id"/>
<field name="job_id"/>
<field name="work_phone"/>
<field name="mobile_phone"/>
<field name="work_email"/>
<field name="political_aspects"/>
<field name="dang_data"/>
<field name="contract_type_id"/>
<field name="date_end"/>
<!-- <field name="version"/>-->
<field name="identification_id"/>
<field name="user_sex"/>
<field name="nation"/>
<field name="birthday_month"/>
<field name="old"/>
<field name="entry_date"/>
<field name="confirmation_date"/>
<field name="interrupt_work_month"/>
<field name="cumulative_work_month"/>
<field name="cumulative_work_years"/>
<field name="graduate_school"/>
<field name="profession"/>
<field name="high_degree"/>
<field name="high_degree2"/>
<field name="graduate_date"/>
<field name="user_type"/>
<field name="user_number"/>
<field name="company_id"/>
<field name="work_location_id" column_invisible="1"/>
<field name="end_comparison" column_invisible="1"/>
<field name="name"/>
<field name="department_id"/>
<field name="job_id"/>
<field name="work_phone"/>
<field name="mobile_phone"/>
<field name="work_email"/>
<field name="political_aspects"/>
<field name="dang_data"/>
<field name="contract_type_id"/>
<field name="date_end"/>
<!-- <field name="version"/>-->
<field name="identification_id"/>
<field name="user_sex"/>
<field name="nation"/>
<field name="birthday_month"/>
<field name="old"/>
<field name="entry_date"/>
<field name="confirmation_date"/>
<field name="interrupt_work_month"/>
<field name="cumulative_work_month"/>
<field name="cumulative_work_years"/>
<field name="graduate_school"/>
<field name="profession"/>
<field name="high_degree"/>
<field name="high_degree2"/>
<field name="graduate_date"/>
<field name="user_type"/>
<field name="user_number"/>
<field name="company_id"/>
<field name="work_location_id" column_invisible="1"/>
</tree>
</xpath>
</field>
@@ -584,13 +589,17 @@
<field name="pinyin_min"/>
</xpath>
<xpath expr="//filter[@name='group_manager']" position="after">
<filter name="'group_is_membership" string="工会会员" context="{'group_by': 'is_membership'}"/>
<filter name="group_is_membership" string="工会会员" context="{'group_by': 'is_membership'}"/>
</xpath>
<xpath expr="//search" position="inside">
<header_search>
<quick_filter string="状态">
<filter string="在职" name="user_state" domain="[('user_state', '=', 'in')]" />
<filter string="离职" name="to_do" domain="[('user_state', '=', 'leave')]" />
<filter string="退休" name="done" domain="[('user_state', '=', 'withdraw')]"/>
<filter string="即将到期" name="end" domain="[('end_comparison', 'in', ['red', 'yellow', 'blue'])]" shownumber="1"/>
<filter string="在职" name="user_state" domain="[('user_state', '=', 'in')]"/>
<filter string="离职" name="to_do" domain="[('user_state', '=', 'leave')]"/>
<filter string="退休" name="done" domain="[('user_state', '=', 'withdraw')]"/>
<filter string="即将到期" name="end"
domain="[('end_comparison', 'in', ['red', 'yellow', 'blue'])]" shownumber="1"/>
</quick_filter>
</header_search>
</xpath>
@@ -602,15 +611,15 @@
<field name="binding_model_id" ref="hr.model_hr_employee"/>
<field name="state">code</field>
<field name="code">action = model.action_hr_employee()</field>
<field name="groups_id" eval="[(4, ref('base.group_system'))]"/>
<field name="groups_id" eval="[(4, ref('base.group_system'))]"/>
</record>
<record id="all_write_social_base" model="ir.actions.server">
<record id="all_write_social_base" model="ir.actions.server">
<field name="name">更新公积金</field>
<field name="model_id" ref="hr.model_hr_employee"/>
<field name="binding_model_id" ref="hr.model_hr_employee"/>
<field name="state">code</field>
<field name="code">action = model.update_social_base()</field>
<field name="groups_id" eval="[(4, ref('base.group_system'))]"/>
<field name="groups_id" eval="[(4, ref('base.group_system'))]"/>
</record>
<record id="hr.open_view_employee_list_my" model="ir.actions.act_window">
<field name="view_mode">tree,kanban,form,activity,graph,pivot,hierarchy</field>
@@ -621,7 +630,7 @@
<record id="all_employee_contacts_action" model="ir.actions.act_window">
<field name="name">通讯录</field>
<field name="res_model">hr.employee</field>
<field name="domain">[('is_company','=',True)]</field>
<field name="domain">[('is_company', '=', True)]</field>
<field name="view_mode">tree,kanban,form,search</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', 'view_id': ref('yuthon_hr_employee.view_employee_contacts_tree')}),
@@ -649,7 +658,7 @@
<record id="all_employee_member_action" model="ir.actions.act_window">
<field name="name">会员列表</field>
<field name="res_model">hr.employee</field>
<field name="domain">[('is_membership','=',True), ('is_company','=',True)]</field>
<field name="domain">[('is_membership', '=', True), ('is_company', '=', True)]</field>
<field name="context">{'header_search_default_user_state': 1}</field>
<field name="view_mode">tree,kanban,form,search</field>
<field name="view_ids" eval="[(5, 0, 0),
@@ -660,30 +669,30 @@
<field name="view_mode">tree,kanban,form,activity,graph,pivot,hierarchy</field>
</record>
<!-- <record id="all_data_write_time_form" model="ir.actions.server">-->
<!-- <field name="name">批量更新时间表</field>-->
<!-- <field name="model_id" ref="hr.model_hr_employee"/>-->
<!-- <field name="binding_model_id" ref="hr.model_hr_employee"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">action = model.action_hr_time_form()</field>-->
<!-- </record>-->
<record id="all_data_write_employee_state" model="ir.actions.server">
<field name="name">更新员工主角色</field>
<field name="model_id" ref="hr.model_hr_employee"/>
<field name="binding_model_id" ref="hr.model_hr_employee"/>
<field name="state">code</field>
<field name="code">action = model.action_hr_state()</field>
</record>
<!-- <record id="all_data_write_time_form" model="ir.actions.server">-->
<!-- <field name="name">批量更新时间表</field>-->
<!-- <field name="model_id" ref="hr.model_hr_employee"/>-->
<!-- <field name="binding_model_id" ref="hr.model_hr_employee"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">action = model.action_hr_time_form()</field>-->
<!-- </record>-->
<record id="all_data_write_employee_state" model="ir.actions.server">
<field name="name">更新员工主角色</field>
<field name="model_id" ref="hr.model_hr_employee"/>
<field name="binding_model_id" ref="hr.model_hr_employee"/>
<field name="state">code</field>
<field name="code">action = model.action_hr_state()</field>
</record>
<!-- <record id="view_employee_form_inherit_hr_attendance" model="ir.ui.view">-->
<!-- <field name="name">hr.employee.attendance.form</field>-->
<!-- <field name="model">hr.employee</field>-->
<!-- <field name="inherit_id" ref="hr_attendance.view_employee_form_inherit_hr_attendance"/>-->
<!-- <field name="arch" type="xml">-->
<!-- &lt;!&ndash; 源码的信息暂时隐藏 &ndash;&gt;-->
<!-- <xpath expr="//group[@name='managers']" position="attributes">-->
<!-- <attribute name="invisible">1</attribute>-->
<!-- </xpath>-->
<!-- </field>-->
<!-- </record>-->
<!-- <record id="view_employee_form_inherit_hr_attendance" model="ir.ui.view">-->
<!-- <field name="name">hr.employee.attendance.form</field>-->
<!-- <field name="model">hr.employee</field>-->
<!-- <field name="inherit_id" ref="hr_attendance.view_employee_form_inherit_hr_attendance"/>-->
<!-- <field name="arch" type="xml">-->
<!-- &lt;!&ndash; 源码的信息暂时隐藏 &ndash;&gt;-->
<!-- <xpath expr="//group[@name='managers']" position="attributes">-->
<!-- <attribute name="invisible">1</attribute>-->
<!-- </xpath>-->
<!-- </field>-->
<!-- </record>-->
</odoo>
+5 -5
View File
@@ -195,11 +195,11 @@
action="attendance_iot.attendance_iot_action"
sequence="21"/>
<menuitem id="menu_iot_message"
name="考勤机Mqtt信息"
parent="hr_attendance_root_board_menu"
action="attendance_iot.iot_message_act_window"
sequence="22"/>
<!-- <menuitem id="menu_iot_message"-->
<!-- name="考勤机Mqtt信息"-->
<!-- parent="hr_attendance_root_board_menu"-->
<!-- action="attendance_iot.iot_message_act_window"-->
<!-- sequence="22"/>-->
<menuitem id="attendance_resources_setting_root_board"
name="配置"